DAVID MALAN: Alles klar. Dies ist CS50, und dies ist das Ende der Woche neun. Es war ein Wirbelwind über in den letzten Tagen. Und Problem stellte sieben, wenn Sie Knie sind tief hinein, erkennen, es ist ein ganz bisschen neu, das ist drin. Aber lasst uns sehen, ob wir nicht Stück für Stück alles zusammen hier kurz bevor dann abzukommen in noch eine andere Richtung und sehen wo sonst können wir gehen. Also bisher haben wir über HTML gesprochen. Wir haben darüber gesprochen CSS. Wir haben darüber gesprochen PHP. Sie haben damit begonnen, SQL erleben. Heute, wir reden ein bisschen über JavaScript. Aber wie all diese disparaten Sprachen zusammen passen? So sprachen wir letzte Woche über die Begriff der mit einem Server. Also lasst uns einfach zeichnen dieses Rechteck als Web-Server hier. Und ein Web-Server dient sicherlich Dateien. Und einige dieser Dateien können HTML-Dateien sein. So ist eines der Dinge, die ein Webserver kann ausspucken könnte sein, dass eine Datei wir einfach so ziehen mit etwas HTML. So in juristischer Hinsicht, was keine HTML können Sie tun? ZUSCHAUER: Seite schön aussehen. DAVID MALAN: OK, machen eine Seite schön aussehen, obwohl ich glaube, ich habe bewiesen, dass anders angegeben. So funktioniert HTML können Sie das Seitenlayout strukturell, und ermöglicht es Ihnen, Art ästhetisch markieren einen Seite, markieren statische Inhalte, so dass Sie Anschließend können sie mit einem Web-Browser. Aber das ist der Schlüssel. Es ist statische Inhalte. Sie schreiben, speichern Sie es, und dann versenden Sie es. Und die Web-Server dient dann es für Ihre Besucher. Aber wir stilisieren Dinge mit einem anderen Sprache überhaupt. Wir fingen an, einen Stil-Attribut verwenden auf bestimmten Tags. Und das style-Attribut lassen uns gesetzten Dinge wie Schriftgröße und-farbe. Und Sie haben wahrscheinlich begann zu entdecken, oder Sie in Kürze für die endgültige Projekte potenziell noch andere Eigenschaften, die Sie in CSS verwenden können. Und so in juristischer Hinsicht, was dann wirklich funktioniert CSS? Das sind nur einige Beispiele davon. Was bedeutet es können Sie tun, dass HTML nicht zu scheinen, was haben wir bisher gesehen? ZUSCHAUER: Definieren Arten von sich. DAVID MALAN: Define Arten von sich. So definieren Dinge wie Klassen, wie Sie kann begegnet sind, oder einmalig identifizieren Knoten in einem Dokument so dass man sie stilisieren. Aber genauer gesagt, würde ich sagen, dass CSS wirklich lässt Sie Dinge, die die letzte Meile und ermöglicht Ihnen, viel angeben genauer die Ästhetik, während HTML zum größten Teil lässt Sie strukturieren Ihre Seiten. Und obwohl es einige Ausfälle, wie wir sahen, die Tag für tag eine Überschrift, die grob gesprochen die Dinge groß und Fett. Das ist eine recht allgemeine Definition der tag - groß und Fett. Welche Schriftgröße ist das? Welche Farbe ist das? Wie fett ist das denn? Und CSS können Sie mehr fein tune Dinge. Sowie Layout, wie einige von euch gesehen haben. Und ehrlich gesagt, ist ein bisschen CSS einer unordentlichen Sprache. Es ist sehr mächtig in die Sie machen können buchstäblich jede Website, die Sie haben gesehen auf dem Netz heute mit ihm, aber es ist ein bisschen wie ein Schmerz im Nacken. Und einige von euch haben den Kopf gestoßen gegen die Wände bereits nur zu tun etwas Dummes wie Mitte ein Menü auf Problem stellte sieben, wenn Sie bekommen haben dieser Punkt bereits. Aber klar, die Dinge einfacher im Laufe der Zeit. Du fängst an, Muster zu bemerken. Und wieder wird Google dein Freund sein für die verschiedenen Wege, auf denen Sie lösen diese Arten von Problemen. Und ich wage zu behaupten, mit CSS, HTML und mehr Im Allgemeinen können Sie Probleme lösen in viele weitere Möglichkeiten, von denen alle Macht sehr richtig sein, als Sie sich in so etwas wie C, auch jetzt PHP oder JavaScript. Es gibt einfach viele verschiedene Möglichkeiten, Dinge auslegen. Aber das fing an, chaotisch, sagten wir. Nur irgendwie Vermischung Ihre HTML-und CSS mit dem style-Attribut war ein wenig schlampig. Und so haben wir stattdessen sagte, irgendwie abstrakt gesprochen, dass Sie sollten mindestens Faktor starten Ihre CSS wahrscheinlich. Nicht Ihr Stil Attribute, aber zumindest verwenden Sie die Style-Tag in das, was Teil der Web-Seite? ZUSCHAUER: Head. DAVID MALAN: In den Kopf. Bis jetzt hatten wir nur den Titel bis gibt, aber Sie können auch einen Stil tag, und Sie können Ihre CSS etwa setzen Sprechen zum Anfang der Seite. Aber dann haben wir noch einen Schritt weiter und wir berücksichtigt, dass mehr in einer separaten Datei. Und so sind diese beiden Dateien waren irgendwie sind nun miteinander verbunden. Und in der Tat war es der tag, der das tat. Und was war einer der übergreifenden Motivationen für Factoring unsere CSS Umso mehr? ZUSCHAUER: Wiederverwendbarkeit. DAVID MALAN: Wiederverwendbarkeit. Right? Sie können in p-Set sieben bereits gesehen haben dass eine Menge der Seiten, die Kauf-Seite, die den Verkauf der Seite Portfolio-Seite, sind wahrscheinlich strukturiert etwas ähnlich. Es gibt eine CS50 Finanzen Logo an der Spitze es sei denn, Sie haben beschlossen, es zu ändern. Es gibt eine Fußzeile am Unterseite der Seiten. Und CSS können Sie ihn dann ausklammern sie in eine separate Datei, so dass, wenn Sie wollen etwas global ändern über die gesamte Website, können Sie wirklich ändern Sie es einfach an einem Ort. Aber es gibt einen Preis, den Sie bezahlen möglicherweise indem Sie die einkalkuliert CSS von meiner HTML-Datei in einem separaten Datei, die auf sie mit der tag, die wir am Montag sahen. Was könnte die Kehrseite der Medaille zu sein? Denken wir zurück, um vor einer Woche, wenn wir Gespräch über HTTP und TCP / IP und wie das Internet funktioniert. Etwas mehr als hier? ZIELGRUPPE: Es braucht mehr Zeit. DAVID MALAN: Es braucht mehr Zeit. Warum? ZIELGRUPPE: [unverständlich]. DAVID MALAN: Ja. So dauert es wohl ein bisschen mehr Zeit. Weil man ist der CSS offensichtlich nicht in der gleichen Datei. So, jetzt müssen Sie nicht machen eine, sondern zwei Anfragen. Und jede dieser Anforderungen, wie wir sahen in Chrome in der sogenannten Inspector, und wir schauten auf die Registerkarte Netzwerk, die jeweils dieser Dateien erfordert ein HTTP Anfrage, die wir sahen, nimmt einige Zeit. Nun, vielleicht ist es nicht viel. Vielleicht ist es nur 20 Millisekunden. Vielleicht ist es 200 Millisekunden. Aber über eine Seite wie Facebook zu denken, oder CNN, oder Google, die viel sind größer als die Beispiele, die wir haben sah so weit. Diese Seiten könnten Dutzende von Dateien, von denen jeder könnte ein erfordern Download einer Datei. So können Dinge potenziell beginnen zu verlangsamen. Und vor allem in diesen Tagen, wenn wir alle haben Handys in der Tasche und langsameren Internet-Verbindungen mit bis warten Sie ein paar Millisekunden, um nur einige mehr Millisekunden für zusätzliche Dateien können tatsächlich langsam sein. Latenz ist das Wort, das beschreibt, Art wartet, dass Sie, dass Sie erleben beim Warten auf einige Information. Aber es ist ein auf dem Kopf. Also es ist nicht alles irgendwie ein - es ist eigentlich ein bisschen wie eine Wippe hier. Downside jetzt, aber was Browser tun können wenn sie klug, um zu vermeiden mit, um die gleiche styles.css anfordern Datei erneut sein kann, was tun? Zwischenspeichern. So Caching - C-A-C-H-E - bedeutet in der Regel hier nur zum Speichern der Datei, die Sie zum ersten Mal angefordert wird, und dann überprüfen Sie den Cache für sie. Überprüfen Sie Art Vorratsbehälter sind, und wenn Sie bereits eine Kopie styles.css, auch wenn einige andere Seite der p-Set oder einer Website, wieder fordert er, nur um das zu geben Benutzer das gleiche Cache-Kopie. Kümmern Sie sich nicht diese angefordert. Downside gibt, obwohl, wie einige von euch haben in der p-Satz ausgelöst. Wenn Sie eine Änderung vornehmen auf dem Server und Sie zurück an den Browser gehen, und Sie neu zu laden, manchmal funktioniert der Browser Sie ein Gefallen und stört nicht re-Download Ihrer Datei styles.css weil, komm, sind das, was die Chancen dass diese Stile, die Facebook nutzt gehen, um Stunde zu Stunde oder ändern Tag zu Tag? Es ist ziemlich gering. Sie könnten mit der Zeit ändern, aber nicht von Minute zu Minute und von Stunde zu Stunde. So ein Trick, nur FYI, wenn dabei Web Entwicklung, wird oft halten Sie die Shift-Taste zum Beispiel und dann auf laden in Ihrem Browser, und das wird in der Regel sagen, den Browser neu laden alles, auch wenn Sie bereits sie im Cache. Also noch einmal, Vor-und Nachteile, aber alle von ihnen letztlich Design-Entscheidungen. So, jetzt haben wir nicht nur Ende der Geschichte hier. Wenn ich nun zurück, und hin und zurück zu gehen und Rücken, haben wir begonnen, nicht nur vorstellen HTML, aber PHP. So in juristischer Hinsicht, was PHP hat uns zu tun? ZIELGRUPPE: [unverständlich]. DAVID MALAN: Was ist das? ZIELGRUPPE: Einführung Logik in den Code. DAVID MALAN: Ja, vorstellen Logik in den Code. So ist es eine echte Programmiersprache ist mit Schleifen und Variablen, und Funktionen und Bedingungen, und alle die Dinge, die wir verwendet haben Weg zurück wenn da Kratzer. Und PHP, die wir gesehen haben, verwendet werden entweder auf der Kommandozeile - es nicht haben, etwas zu tun haben mit der Bahn, auch wenn das wirklich seinen Ursprung und was es dazu neigt, gut und förderlich zu sein - aber man kann PHP nur von der Natur nutzen der Tatsache, dass es einen Druck () Funktion und eine printf ()-Funktion, oder echo ()-Funktion. Es gibt Trauben von Möglichkeiten, wie Sie können Text mit PHP zu drucken. Daher können Sie diese Programmierung verwenden Sprache zur Ausgabe genau das, was wir vor rede. Sie können dynamisch generieren Ihre HTML. Vielleicht nicht alles. Vielleicht Fest Code Dinge, wie die Kopfzeile und die Fußzeile, und das Logo, und Stylesheets, und das alles. Aber für so etwas wie p-set sieben, wo Sie manipulieren Aktien sind und zeigt das Portfolio des Benutzers, das ist, gehen, um dynamisch zu ändern, können Sie sicherlich mit PHP und die Logik gibt es Sie als Programmiersprache Ausgangs dynamisch Teilmengen der Seite. Also, wenn Sie dynamische Webseiten zu sprechen, oder Web-Programmierung, das ist was Sie wirklich darüber zu reden. Mit einer Sprache wie PHP, oder Dinge genannt Python oder Ruby, oder Java, oder noch andere Sprachen, um eine Datenbank abfragen häufig oder ein anderer Server, und dann dynamisch aus HTML spucken. Jetzt ist das Endergebnis als beiseite, dass der HTML-Code der meisten Websites, einschließlich Ihrer p-set sieben, ist wahrscheinlich gehen, um ein großes Durcheinander, wenn sein Sie an der Quelle zu sehen Code in einem Browser. Das ist keine große Sache. An diesem Punkt, wenn wir über die Pflege Stil, über die wir kümmern uns Sachen, die Sie schreiben. Wir werden nicht über die Dinge kümmern dass das, was Ihr Code Ausgänge. Also nicht über Einbuchtung Sorgen hier, wenn es das ist, PHP tatsächlich ausgibt Zeug. Immerhin wird der Browser sich nicht, und ein Mensch wird nicht auf der Suche an der Quelle sowieso. Wir, die Mitarbeiter, zum Beispiel, würde sein Blick auf Ihre PHP. Also lassen Sie mich ein kleines Beispiel jetzt warum sonst könnte dies nützlich sein. Also ehrlich gesagt, kann ich mich nicht erinnern, das letzte Mal habe ich C, um ein Problem zu lösen, in die reale Welt. Es war wohl in der Graduate School, wenn Ich brauchte, um eine Sprache zu verwenden, die war recht niedrigen Niveau und gab mir die Gelegenheit, etwas zu tun, sehr hoch Durchführung, so viele CPU wirklich sparen Zyklen, wie ich konnte, zum großen Teil denn ich wurde mit großen Datenmengen, und jede CPU-Zyklus gezählt. Und ehrlich gesagt, auch in Dinge wie Handys in diesen Tagen und andere Geräte wo man nicht ganz so viel zu tun haben Speicher und Sie wissen nicht recht haben, wie viel CPU, indem schnellere Sprachen ist immer noch ansprechend. Aber in der realen Welt, wenn man nur wollen einige Programm zusammen zu werfen einige Daten zu analysieren, oder die Sie gesammelt haben eine ganze Reihe von Anmeldungen für einige Studentengruppe, und Sie müssen sehr wünschen schnell automatisieren E-Mails nacheinander an jeder von diesen Registranten, wirst du für zu erreichen sind eine höhere Sprache als C so zu sprechen. So etwas wie PHP oder Python oder Ruby, oder ein halbes Dutzend andere, die es gibt in diesen Tagen. Aber die drei sind wahrscheinlich die angesagtesten jetzt. Und was das bedeutet, ist, dass Sie öffnen können bis einem Texteditor wie gedit oder die meisten alles andere und dann starten Sie einfach Code zu schreiben, ohne sich Sorgen zu machen über das Kompilieren, ohne wirklich Sorgen über Speicherverwaltung, Halten Sie aber, dass ein wenig Schlamperei irgendwann wieder kommen , Sie beißen, wenn der Datensatz wird größer oder das Problem groß wird. Aber was bedeutet dies für uns ist die folgende. Lassen Sie mich gehen Sie vor und führen Speller von Problem stellte sechs. Also das ist meine Trie-basierte Implementierung dass ich auf der großen verwendet Bord, wo ich nicht so gut durchgeführt. Wir werden in einer Woche wieder zu kommen und erneut diejenigen, die am Ende hat sich oben auf der große Tafel an unserem letzten Vorlesung. Aber jetzt lassen Sie mich vor und gehen Sie einfach laufen meine Lösung im Text, und wir tun die King-James-Bibel, und hier gehen wir. Das sind also alle der angeblich falsch geschriebene Wörter aus die King-James-Bibel. Und meine Umsetzung erfolgte eine halbe Sekunde in total. Also gar nicht so schlecht auf diese bestimmten Computer. Aber denken Sie an, wie viel Code musste ich schreiben. Überlegen Sie, wie viel Code, den Sie hatten, zu schreiben. Überlegen Sie, wie viele Stunden Sie in der verbrauchte D-Halle oder Ihrem Wohnheim oder wo auch immer tatsächlich Kodierung von bis diese Lösung. Nun, wenn ich tatsächlich eine höhere Ebene Sprache wie PHP, zur Kenntnis nehmen was ich hier tun kann. Zuerst nehme an, dass es sich statt Ihre Distribution Code. Dies ist eine Datei namens Speller. Es ist, als Teil der heutigen verfügbar Verteilung Code. Und ich werde meine Hand auf die meisten winken der Details, aber das ist eigentlich ein interessantes Beispiel dafür, wie Sie könnte Port eine Sprache wie C über PHP. Ich habe buchstäblich eröffnet zwei Textfenster, ein mit meiner C-Version von speller.c, und ich habe gerade angefangen zu übersetzen es in meinem Kopf, um PHP und geben es aus mit die nächsten äquivalente Funktionen. So einige dieser Dinge sind anders. Wir sahen letzte Mal, dass PHP nicht verwenden enthalten in genau der gleichen Weise. Es nutzt erfordern in der Regel, wenn auch gehören existiert. Definieren Sie ist ein wenig anders aus # Define in C, aber das ist wie wir eine Konstante. $ Argc es stellt sich heraus gibt es in PHP, so haben wir gesehen, dass. Dies sind nur Variablen, die alle die beginnen mit Dollar-Zeichen. Daran erinnern, das sind nur ein paar von schwimmenden Punkten. So lange Rede kurzer Sinn, sind Sie herzlich eingeladen, Blättern Sie durch dieses, wenn neugierig, das ist fast eine Zeile für Zeile Umwandlung der C-Version von speller.c in PHP. Und man konnte diese wieder tun ein halbes Dutzend anderer Sprachen. Aber was interessant ist diese. Oder was ist offen entmutigend dies ist. Lassen Sie mich gehen Sie vor und geben über dictionary.php, und behaupten, dass ich werde weitermachen und neu implementieren Problem stellte sechs hier. Also lassen Sie uns zunächst vor, dass in diese Datei, die in umgesetzt werden PHP, so lassen Sie mich meinen, dass Tags wie öffnen. Lassen Sie mich eine globale geben Variable $ size bekommt Null. Und ich werde geben mich eine Hash-Tabelle. Ich werde eine Hash-Tabelle für diese Sache zu verwenden. Wie kann ich erklären, eine Hash-Tabelle in PHP? Fertig. OK. So Klammer auf Klammer zu für was in PHP, wie wir gesehen haben? Ein Array, sondern ein Array, das könnte sein, ein assoziatives Array. Ein assoziatives Array ist eine Datenstruktur, Schlüssel mit Werten verbindet. Jetzt im einfachsten numerisch indiziert Array, sind die Tasten, was? Zero, ein, zwei, drei, oder? Old School Stuff von C. zurück Aber es kann auch Zeichenfolgen wie foo und bar, oder maxwell, oder eine solche Zeichenkette. So kann ich das nutzen in nur einem Augenblick. Lassen Sie mich gehen Sie vor und erklären eine Funktion wie - lassen Sie uns zuerst load (). Also Funktion load (). Und PHP ist, dass ein wenig anders Sie buchstäblich Funktion geben, aber Sie nicht geben Sie einen Rückgabetyp. Ich werde weitermachen und sagen, dass die Last ()-Funktion sollte in nehmen Argument $ Wörterbuch, nur wie C-Version getan hat. Ich mache das aus dem Speicher. Und ich schlage vor, dass ich , dies zu tun. Ich werde einfach foreach zu tun. Ich werde eine Funktion namens nennen file () übergeben den Namen, dass Datei, die die Variable $ $ Wörterbuch als Wort. Und dann in meiner for-Schleife hier, ich bin werde weitermachen und speichern in meinem $ Table, dass $ Wort wahr wird. Fertig. Oh, warten. Fertig. OK. Das ist die Last ()-Funktion sagen in PHP. Nun, warum funktioniert das? Und ich bin eine Art von Betrug hier. So, ein, foreach sahen wir kurz letzten Zeit. Es bedeutet nur, dass Sie durchlaufen ein Array, ohne sich mit i und n und plus plus, und das alles. Wörterbuch ist natürlich der Name der Datei, etwas wie groß oder klein, die beiden Wörterbücher verwendeten wir letztes Mal. Die Datei ist eine Funktion, die sich auftut Text Datei, liest er in Zeile für Zeile, und Hände, die Sie sichern eine riesige Auswahl, enthält, deren Elemente ein Zeile aus der Datei. Also das ist die Kombination von fopen und fread und while-Schleife, und fclose, und das alles. Schließlich, wie Wort bedeutet nur, das ist die Variable werde ich Zugang zu haben bei jeder Iteration in dieser Schleife. Also kurz gesagt, diese Einzeiler bedeutet hier öffnen Sie die Datei, deren Name in Wörterbuch, die Variable, durchlaufen Zeile für Zeile und jedes Mal, wenn Sie eine Linie, speichern in einer Variablen namens Wort, und dann tun Sie etwas mit Wort. Was will ich tun? Ich möchte mein Wort in Hash-Tabelle setzen. Nun, ich kann etwas in meinem setzen Hash-Tabelle wie in C mit eckigen Klammern. Dies ist der Name für meine Hash-Tabelle. Ich bin zum Index gehen in diesem Hash Tisch an diesem Standort. Also nicht Klammer Null, nicht eine Halterung. Bracket Zitat unquote etwas, was auch immer das Wort ist. Und wie Sie vielleicht in Ihrem haben Hash-Tabelle Trie Arbeit, die Sie gerade speichern effektiv ein Boolean, implizit oder explizit. Fertig. Ich bin Speicherung der Wert true. Jetzt gibt es ein paar Dinge, Ich schneide Ecken hier. Technisch ist es geht um ein sein ärgerlich neuen Zeile / n, am Ende jedes dieser Wörter. Also sollte ich wohl nennen eine PHP-Funktion genannt chop (), die wird wahrsten Sinne des Wortes, dass hacken weg. Und ich tatsächlich benötigen, um tun eine andere Sache. Ich sollte wohl erhöhen Größe auf jedem Iteration, so dass ich die Verfolgung global von dem, was es ist. Und ehrlich gesagt, und dies ist einer der dümmer Aspekte von PHP, wenn Sie mit einer globalen Variablen, müssen Sie explizit sagen, dass du bist. Also werde ich tatsächlich in globale geben $ Size, global $ table, und jetzt meine Funktion abgeschlossen ist. Also nicht ganz so einfach wie früher, aber wahrscheinlich weniger Zeit als die C Version, vielleicht? OK. So, jetzt machen wir den Scheck ()-Funktion. Mal sehen, ob dies zumindest nahm die Stunden lang am Ende, dass es nahm uns in C. So lassen Sie mich gehen Sie vor und erklären zu überprüfen, wie eine Funktion. Nimmt in Wort Argument ist die werde von Speller kommen. Und ich werde einfach zu überprüfen, ob die Folgende Variablen isset, Tisch Halterung strtolower des Wortes - lasst balancieren alle meine Klammern - dann true zurück. Else - das war wirklich die harte Teil dieses Programms. Else, false zurück. Fertig. Das ist check (). Nun, warum funktioniert das? Nun, die ich in einem Wort übergeben, Das ist ein String. Zwei, ich bin in der Hash-Überprüfung Tisch, genannt $ Tisch. Ich zwingt ihn, indem Kleinbuchstaben eine Funktion sehr ähnlich tolower () in C, aber das macht das ganze Wort, nicht ein einzelnes Zeichen. Und wenn das gesetzt ist, in anderen Worten, es ist ein Wert gesetzt, mit anderen Worten, wenn es wahr ist, dann ja, Dies ist ein Wort. Weil ich es dort mit load (). Und wenn nicht, werde ich false zurück. Jetzt sind die anderen einfach. Funktion size (), wie kann ich dies tun? Ich weiß im Wesentlichen zurückkehren $ size. Aber ich muss technisch tun diese lästige Sache. Und eigentlich hören, war ich Schneiden einer Ecke zu viele. Ich muss wirklich global $ Tabelle zu tun. Aber, dass gesagt wird, entladen). Unload () ist erstaunlich. Funktion entladen (). Wie will ich zu entladen () implementieren? Fertig. OK. So entladen () ist der Speicher-Management vollständig erledigt für Sie in so etwas wie PHP und eine Menge von höheren Sprachen. Also das ist erstaunlich. Wie, warum zum Teufel haben wir die Vergangenheit verbracht acht Wochen auf Plus C schriftlich anscheinend wirklich langsam, wirklich an der Zeit verbrauchen Probleme mit zehn Stunden Arbeit unter unseren Gürteln? Nun, für eine Sache, kann diese Arbeit Geldstrafe für kleine Programme. Es ist sicherlich beschleunigt meine Entwicklungszeit. Aber lasst uns sehen, was passiert in der realen Welt. Lassen Sie mich in diesem Verzeichnis in einem Terminal-Fenster. Es gibt Speller. Und nebenbei bemerkt, und man könnte angetroffen haben dieses Problem in Satz sechs oder sieben Problem eingestellt. Sie müssen nicht unbedingt müssen Ende PHP-Dateien mit. php. Wenn du eine Zeile wie diese erste bei Ganz oben, das ist eine spezielle Linie der Syntax, die im Wesentlichen bedeutet, finden das Programm namens PHP und es verwenden, um diese Datei interpretieren. So, jetzt niemand wirklich weiß, dass Ich bin ein PHP-Programm. Ich kann es nur laufen, als ob es wurden etwas in C kompiliert Aber hier ist das Ding. Eigentlich machen wir das wieder. Dropbox/pset6 /. Es gibt Speller. OK, 0,44 Sekunden. Es wurde schneller diesmal. Lassen Sie uns nun in die PHP-Version gehen. Nette Geste. Aber denken Sie nur, wie viel Zeit Ich sparte an Bürozeiten. OK. Also 3,59 Sekunden, die eigentlich klingt nicht präzise entweder. Aber das ist, weil es kurz, wenn Sie den Ausdruck eine riesige Menge Sachen auf den Bildschirm, dass selbst Dinge verlangsamt. Was es wirklich die CPU in die Gerät war 3,59 Sekunden, in Im Gegensatz zu C, die 0,44 nahm Sekunden vor kurzem. Das ist wirklich eine Reihenfolge der Größenordnung anders. Also, wo ist, dass der Preis aus? Warum ist es so viel langsamer? Warum PHP durchzuführen, so schlecht? Danielle? ZIELGRUPPE: Sie haben nicht wirklich verwenden Sie eine Hash-Tabelle. DAVID MALAN: Ich habe nicht wirklich verwenden Sie eine Hash-Tabelle. Also habe ich getan. Es ist also ein assoziatives Array. Wahrscheinlich, wenn die Leute bei PHP wirklich smart, unter der sie verwendet Haube eine tatsächliche Hash-Tabelle implementiert in so etwas wie C oder C + +. Aber. Ja. ZIELGRUPPE: [unverständlich]. DAVID MALAN: Ja. Also jede der Funktionen, die ich jetzt geschrieben - Eigentlich kann man sagen, dass einmal mehr ein etwas lauter? ZIELGRUPPE: Jede der Funktionen, die Sie enthalten hat viel mehr Voll Kapazität als - DAVID MALAN: Also das ist sehr wahr. Es gibt viel mehr Aufwand, dass wir nicht wirklich zu sehen, indem sie nur auf dictionary.php, die ich gerade geschrieben habe. Im Gegensatz dazu gibt es eine ganze Dolmetscher gehen in den Hintergrund. In der Tat, wenn ich lief dieses Programm, es nicht ausgeführt wurde zusammengestellt Nullen und Einsen für meine Intel CPU ausgelegt. Vielmehr lief Zeile für Zeile PHP-Code, der genau aussieht wie wir es getippt. Und so, wenn Sie eine verwenden interpretierte Sprache, die Sie eigentlich zahlen diesen Preis. Es wird einige Zeit dauern, um zu lesen Ihre Datei von oben nach unten, von links nach rechts, und führen Sie dann jeweils Linie wieder und wieder. Jetzt in der Realität, vor allem über das Internet, Sie können tatsächlich beschleunigen diesen Prozess durch Zwischenspeichern der Ergebnisse der PHP-Code interpretiert. Und das macht Sinn, über das Internet, weil wenn Sie nicht ein Benutzer wie haben mich hier, aber 1.000 oder 10.000 Benutzer, dann vielleicht das erste Mal die Datei abgerufen, es ist langsam, aber danach es ist viel schneller. Aber auch dies ist wiederum ein Kompromiß. Und für so etwas wie eine Forschungsdaten eingestellt ist, oder sogar etwas groß wie diese, werden die Benutzer schließlich beginnen, diese Verlangsamung fühlen. Also kurz gesagt, interpretierte Sprachen sehr viel in der Mode, sehr beliebt, und ehrlich gesagt sind wahrscheinlich die Sprachen, die Sie sollten bei der Lösung von Problemen zu erreichen Anschluss an CS50. Aber klar, wie viel Sie wirklich nehmen für gewährt unter der Haube wirklich diese letzten Wochen in Hash- Tabellen und Bäumen, und versucht, was letztendlich tatsächlich verwendet werden Umsetzung Dinge wie offene Klammer, eckige Klammer, die wir jetzt dankbar für selbstverständlich. Werfen wir also einen Blick jetzt in dieser Web-Kontext. Und ich erwähnte letzte Mal, dass es ein Haufen von Superglobalen in PHP, dass sind nicht wirklich relevant auf der Kommandozeile. Sie sind mehr relevant im Kontext der Verwendung von PHP in einer Web-Kontext. So läuft PHP auf einem Web-Server, um um Sachen wie HTML zu generieren. Und wir blickte auf $ _GET und $ _POST, das ist, wo automatisch der Benutzer Eingangs endet einfach, wenn Sie unterbreitet einen zu bilden, um eine Datei mit der Endung. php auf einer Web- Server wie das Gerät. Aber lassen Sie uns kurz auf $ _COOKIE Und $ _SESSION. In juristischer Hinsicht, was ist ein Cookie als Sie es im Kontext der verstehen über das Web? ZIELGRUPPE: Datei auf dem Computer. DAVID MALAN: Ja. Es ist eine Datei auf dem Computer des Benutzers unabhängig von Website gepflanzt Sie geschehen, zu besuchen. Also, wenn Sie auf Facebook, wenn Sie gehen, gehen zu bankofamerica.com, wenn Sie gehen, auf google.com, wenn Sie zu fast jedem gehen Website in der Welt in diesen Tagen, einschließlich cs50.net wird ein Cookie gepflanzt auf dem Computer, das ist entweder im RAM gespeicherte Wert in Ihrem Computer in Ihrem Browser-Speicher oder manchmal in der Tat eine Datei gespeichert auf Ihrer Festplatte. Und was ist in der Regel in dieser Datei gespeichert nicht Ihren Benutzernamen, Ihr vergessen, in der Regel nicht etwas, empfindlich, wenn die Website nicht so gut mit ihrer Sicherheit, sondern es ist eine große eindeutige Kennung unter andere Dinge. Es ist eine große Zufallszahl auf Ihrem gepflanzt Computer, sondern Sie als denken können Art eine virtuelle Hand Stempel wie von ein Club oder ein Freizeitpark, die ermöglicht es dem Personal, dass die Eigentümer der Service, daran zu erinnern, wer Sie sind. Also, wenn das große Zufallszahl ist wie 12345678, aber das ist offensichtlich nicht zu zufällig, denken, dass die Handstempel, dass, wenn Sie besuchen facebook.com zum ersten Mal, sie stempeln diese Nummer auf der Hand. Und dann, weil Sie sprechen HTTP, Sie ein Browser, und weil Facebook spricht offensichtlich das gleiche wie ein Web Server, so das Protokoll HTTP, dass wenn Sie anschließend besuchen facebook.com, ob es eine zweite später eine Stunde später noch am nächsten Tag, so lange, wie Sie nicht explizit haben abgemeldet, effektiv die ist wie die Hände zu waschen. HTTP sagt, Sie sollten Ihren präsentieren Handstempel jedes Mal wenn Sie Rückkehr zu dieser Website. Welche Facebook, dann ist sie nicht schauen, dass Hand-und Stempel sie sagen, oh, 123456789. Ich weiß nicht auf den ersten Blick wissen, dass diese David Malan ist in Cambridge, Massachusetts, aber sie überprüfen können ihre Datenbank und sagen, oh, die Person , auf dessen Computer die wir gepflanzt 123456789 David Malan aus Cambridge, Massachusetts. Lasst uns zeigen, dass die Benutzer dann sein Profil Seite oder seinem News Feed. Aber es gibt hier ein Problem, wenn diese ist, wie das Web in der Tat funktioniert. Werfen wir einen Blick auf ein kleines Beispiel. Lassen Sie tatsächlich gehen zu sagen, facebook.com. Aber bevor wir dorthin gehen konnte, lassen mir gehen Sie vor und öffnen Chrome Inspector hier unten. Lassen Sie mich auf der Registerkarte Netzwerk zu suchen. Und nun gehen Sie vor und geben lassen in https://facebook.com. Und ich mache das so, dass wir nicht sehen alle diese Weiterleitungen und Abfall Blick durch die Zeit. Lassen Sie mich drücken Sie Enter. Gut. Wir sehen eine ganze Reihe von Anfragen. Es kommt Facebook. Es gibt eine ganze Reihe von Dateien. Und hier, nach meiner Erwähnung von Latenz letzte Mal, das ist eine Menge von HTTP-Anfragen. Aber der erste ist wahrscheinlich die interessantesten. Lassen Sie uns also hier unten scrollen, und Ich werde in einem zweiten vergrößern. Das wird Art sein ein Chaos, aber mal sehen. Facebook schickt uns eine ganze Reihe von Sachen. Aber whoa, interessant. Sie sind der Pflanzung nicht eine, sondern vier Handstempel auf meine Hand hier. Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. Und es gibt ein paar Features hier. Alle von ihnen erwähnen einige Art der Ausatmung. Und es sieht aus wie Facebook hofft, an mich zu erinnern, bis zum Jahr 2015. Also das ist vermutlich der Zeitpunkt, zu dem Ich muss sich abmelden oder sie werden nur Ich bin automatisch davon ausgehen, nicht zurück. Also das ist eigentlich ein anständiger Zeit. Und es gibt einige andere Dinge, die sich hier. Dieses Cookie wird zwangsweise sein sagen, es im Jahr 1970 abgelaufen gelöscht vor Cookies existierte. So wird der Browser nur gehen anzunehmen, OK, das ist wie Waschen der Hände Marke. Aber jetzt, wenn mein Browser macht eine nachfolgende Anforderung - lassen Sie mich gehen Sie vor und tun dies wieder und reload. Nun lassen Sie mich zurück blättern Sie zu der Top-Anfrage und nach unten gehen hier anfordern Header. Beachten Sie diese. So, jetzt bin ich unter nicht-Antwort-Header, aber beachten, es sagt Request-Header. Und feststellen, dass mein Browser als Teil des seine Forderung nach der Kollision mit reload hat mindestens folgende gesendet Informationen. Nicht Set-Cookie, aber Cookie. Also das ist die Linie, den HTTP-Header, so zu sprechen, wo mein Browser ist eine Art der ohne mein Wissen präsentieren meine Hand für Facebook-Inspektion. Also diese Cookies kann dann für das, was genutzt? Zu erinnern, wer Sie sind, oder daran erinnern, wie oft Sie dort gewesen sind, oder wirklich etwas. So, hier ist counter.php. Und lassen Sie mich vergrößern Sie die Schrift. Und jedes Mal, wenn ich diese Seite neu laden, Kündigung es ist zu erinnern, wie viele Male Ich bin dort gewesen. Nun, das ist gar nicht so beeindruckend. Sagen wir einfach, dass die Registerkarte zu schließen, und jetzt zurückgehen zu lassen, http://localhost/counter.php. Oh, das ist interessant. Es ist immer noch in Erinnerung, auch obwohl ich die Registerkarte geschlossen. Und ehrlich gesagt, wenn ich den Browser zu schließen, Wenn in der richtigen Weise durchgeführt, I konnte sich noch erinnern, dass dieser Benutzer wer er oder sie war das erste Mal, und nur wenn ich in Chrome-Menü, gehen die hier ist hier, und gehen Sie zu Geschichte, und klicken Sie auf Internetdaten löschen, wie einige von euch vielleicht in der haben Vergangenheit, nur dann wird Ihre Cookies während der Web tatsächlich gelöscht werden Entwicklung. Also, wenn wir gehen - wir hautnah gedit hier. Und wenn wir jetzt auf diese Datei. Lassen Sie mich gehen in unsere vhosts / localhost / Öffentlichkeit, und lass mich tun counter.php. Beachten Sie, dass dies ein ziemlich einfaches Programm. Es ist eine ziemlich einfache Website. Also der Anfang der Datei ist nur Kommentare. Aber hier ist eine neue Linie, die Sie wurden bereits in p-set sieben gesehen, session_start (). Dies ist eine Zeile PHP-Code, der Wesentlichen erzählt die Web-Server machen Achten Sie darauf, die Hände zu stempeln und zu Achten Sie darauf, Handstempel zu überprüfen. Das ist alles, Linie tut, und es tut all dieses Prozesses für uns. Dann merke ich habe gerade zwei Zweige hier. Wenn der Zähler Schlüssel in dieser Sonder globale Variable namens $ _SESSION Eingestellt ist - mit anderen Worten, wenn es etwas gibt Wert - lasst es uns und speichern sie in einem lokalen Variable namens $ Zähler. Else, wir weisen Sie $ counter der Standardwert von 0 auf. Jetzt ist hier ein Aspekt, der von PHP ist ein Segen und ein Fluch. PHP ist ein wenig schlampig. Während also in C, was wäre die Umfang der Gegen haben entweder hier oder hier? Es wäre beschränkt sind auf diese geschweiften Klammern. Ratet mal, was? In PHP, auch außerhalb derer es existiert geschweiften Klammern, hier, und hier, und hier, und hier, und auch unten. Also ich sagen, das ist ein Segen, in dem Sinne, dass Sie nicht haben, um so zu denken hart wie wir schon vor Wochen getan hat. Aber es ist auch ein bisschen wie ein Fluch, dass egal, wo Sie eine Variable in verwenden PHP, zumindest in einem Programm wie dieses, es ist für global zugänglich Guten oder zum Schlechten. Also muss man jetzt, im Auge zu behalten Ihre Variablen kann nicht undefiniert. Sie können sie an anderer Stelle definiert haben. Aber was soll ich denn letztlich tun? Ich werde innerhalb dieser globalen speichern Variable als Wert der Zähler das Ergebnis der Dabei Zähler plus 1. Also das ist nur der Arithmetik das macht die Inkrementierung dieses Zählers. Und die Tatsache, dass ich, dass die Speicherung Wert wieder hier ist Mittel zum die Datenbank zu aktualisieren, um im wesentlichen daran erinnern, dass Benutzer 123456789 hat hier zweimal. Und wenn ich es wieder tun ich das nächste Mal laden Sie die Seite, es geht um zu überprüfen, meine Hand Tempel und sagen, oh, Benutzer 123456789 hat jetzt dreimal hier gewesen. Und so was PHP und ähnliche Sprachen sind für uns tun, ist sie herauszufinden herauszufinden, wie und wo und wie lange Werte in dieser speziellen speichern Superglobal. Und dies superglobale ich das nächste Mal besuchen Sie die Seite ist irgendwie magisch Pre-besiedelten, mit Werten gefüllt, dass da waren Sie das letzte Mal besuchte, ob das vor einer Sekunde war, eine Woche vor oder im Jahr 2013, und wir sprechen jetzt etwa zum Jahr 2015. PHP und der Webserver kümmern all das für Sie. ZUSCHAUER: [unverständlich]. DAVID MALAN: Variablen in PHP sind Wesentlichen immer global, wenn Sie erklären sie innerhalb einer Funktion, und dann sind sie lokal auf die Funktion nur. Aber weil ich keine schriftliche Funktionen, sind sie nun wirksam globalen während meiner gesamten Datei hier. ZUSCHAUER: Gibt es eine Möglichkeit um sie lokale? DAVID MALAN: Gibt es eine Weg, um sie vor Ort? Nur, indem Sie sie in Funktionen. Die in der neuesten Version von PHP, können Sie dies tun mit eine anonyme Funktion. Aber mehr dazu in der Kontext von JavaScript. Aber die kurze Antwort ist nein. Eine längere Antwort ist ja. Nizza. Gut Quizfrage. In Ordnung. So endlich ist die Seite selbst eigentlich ziemlich einfach. Beachten Sie, dass, wenn ich PHP-Modus zu verlassen, erinnern dass all diese Sachen nach unten unten ist gerade dabei, Spieß bekommen aus roh an den Browser. Dies ist in Ordnung, denn ich möchte zu senden der Benutzer einige HTML, aber ich will dynamisch zu aktualisieren, dass die HTML. Und eine Möglichkeit, ich dies tun können, ist zu klären, sehr schnell fallen zurück in PHP Modus verwenden Klammer Fragezeichen Gleichheitszeichen und dann Ausgang der Wert des Zählers. Oder wenn dies ein wenig kryptisch aussieht, diese Gleichheitszeichen ist eigentlich nur einige syntaktischen Zucker für diese printf ($ counter). Aber ehrlich gesagt, das ist nur ein wenig hässlich und ein wenig ärgerlich zu tippen. So PHP sehr schön bietet dieses Feature wo man einfach sagen, dass es mehr bündig in der gleichen Weise. Also, was ist los unter die Haube? Lassen Sie uns schnell Blick auf das Netzwerk Registerkarte hier für counter.php. Und lassen Sie mich voran und zuerst gehen Lassen Sie uns Ihre Cookies löschen. Lassen Sie uns klar Internetdaten seit der Beginn der Zeit. Jetzt gehen wir wieder hier. Nun wollen wir die Seite neu laden. Und ich bin wieder bei Null. Weil meine Hand Stempel wurde gewaschen, Ich bekomme jetzt ein neues Cookie. In der Tat, wenn ich mir die Netzwerk-Registerkarte und Blick auf Response-Header, bemerken dass das Gerät sendet mir Cookie, dessen Name ist etwas willkürlich, aber irgendwie vernünftig, PHPSESSID. Und es schickt mir das wirklich große Zufallszahl. Es ist nicht eine ganze Reihe. Es ist nicht ganz hexadezimal. Es ist eine Art von alphanumerische Zeichenfolge aber vermutlich ist es zufällig. Und das ist die Hand Stempel so auf sprechen, dass ich mich beziehe. Inzwischen, wenn ich auf laden und dann Blick auf diese zweite Linie für meine zweite Anfrage jetzt feststellen, dass meine Anfrage Header enthalten PHPSESSID entspricht dies, nicht Set-Cookie, sondern nur Cookie. Und das ist meines Browsers Präsentation meiner Hand Stempel. So, jetzt als Teaser, und wir werden mehr reden darüber in einer Woche oder so, aber in welcher Weise dies macht Sie verletzlich, deinen Facebook-Account anfällig und andere derartige Konten anfällig? ZUSCHAUER: Wenn jemand Ihre Cookie. DAVID MALAN: Ja, wenn jemand hat Ihre Cookie. Ich meine wirklich, so wie einige von euch vielleicht an wie ein Verein oder eine versucht haben Vergnügungspark, wenn Sie etwas ausprobieren wie diese zu kopieren den Stempel, wenn auch rückwärts auf eine andere Person die Hand, und dann hat er oder sie stellt sie als ihre eigenen, wenn es tatsächlich aussieht identisch, 123456789, dann die Bahn Server ist offenbar gerade dabei, vertrauen, dass der Nutzer Sie ist. Und dies ist in der Tat ein grundlegender Bedrohung jedes Mal, wenn Cookies denn wenn jemand nur so fälscht, um sprechen Ihre Cookie, Figuren heraus, was es wird entweder durch Kopieren wirklich Dazu suchen Sie in Ihrem Computer und wie ist, OK. Davids Cookie ist JJ3JIK und so weiter, und dann sind sie klug genug zu wissen wie das manuell sortieren senden, dass Cookie aus dem Browser oder von einem Programm, das sie schreiben, könnten sie völlig Anmeldung bei einer Website wie Sie. Es ist nicht so schwer zu tun, als jemand anderes, wenn wir p-Reihe erneut zwei, die, was eingeführt? ZUSCHAUER: Kryptographie. DAVID MALAN: Ein wenig Bit der Kryptographie. Einfache Kryptographie, zumindest in der Standard Edition, aber Krypto dennoch. weniger. So stellt sich heraus, wenn Sie alle zu verschlüsseln diese Header mit etwas, dass Sie jetzt vielleicht besser bekannt als SSL wissen, Secure Socket Layer, oder https:// URLs, dann all diese Dinge, die wir waren mit einem Blick auf tatsächlich verschlüsselt was bedeutet, dass es, wie Sie es kann das nicht lesen Handstempel. Nur facebook.com können, oder google.com, oder in diesem Fall kann das Gerät gelesen, dass Hand-Stempel. Tragischerweise aber, und auch dies ist allzu gegebenenfalls mit der NSA Sachen Neuerdings ist auch SSL zerbrechlich. Und es ist eigentlich nicht so schwer noch zu knacken, dass Verschlüsselung. Nicht so sehr durch Cracken der Verschlüsselung, aber durch Tricks die Browser in Entschlüsselung die Daten vorzeitig. Aber noch einmal, wir necken Sie mit, dass vor langer. Denn jetzt, nur Angst. Es ist tragisch Art wahr. In Ordnung. Also, wo kommt das jetzt für uns? Nun, lassen Sie uns dies tun. Gehen Sie voran und nehmen eine schnelle Teaser, bevor wir eine Pause machen. Und ich denke, wir werden ein wenig länger verweilen heute, aber wir gehen zu tauchen etwas ganz Neues und sexy, das wird Appetit auf noch mehr. Also das ist der Teaser. So SQL, wir kamen ins Gespräch über noch so kurz letzten Mal. Sie werden wirklich sich die Hände schmutzig mit einigen der in p-set sieben. Und in juristischer Hinsicht, was macht SQL - S-Q-L - für Sie tun? Was ist das? Ja. ZIELGRUPPE: Lassen Sie uns Sie Zugangsdaten. DAVID MALAN: Ja. Es lässt Sie Zugangsdaten in einer Datenbank. Structured Query Language. Und dies ist im wesentlichen eine Programmiersprache. Es sind Merkmale, daß wir nicht einmal in der Klasse. Aber Sie können effektiv Funktionen definieren. Sie werden gespeichert, die als Prozeduren in SQL. Aber wir werden es ziemlich einfach und einfach weiter verwenden Sie es für einige Grundoperationen wie die Auswahl von Daten, das Einfügen von Daten, Aktualisieren von Daten und Löschen von Daten. Und kann man wirklich von einer Datenbank zu denken, wie eine SQL-Datenbank, wie gerade als Microsoft Excel. Da SQL bezieht sich auf eine relationale Datenbank, in der Beziehung bedeutet nur Tabellen. Zeilen und Spalten. Also alles, was Sie in einer Tabelle setzen können so oder Google Docs, Sie könnten in einer SQL-Datenbank setzen durch die Deklaration einer Tabelle. Nun, wie Sie tatsächlich zugreifen dass die Informationen? Nun, mit Befehlen oder Fragen wie diese. SELECT, INSERT, UPDATE und DELETE. Und in den meisten Fällen sind dies die nur vier Zutaten, die Sie brauchen werden, um etwas zu tun, ganz stark Problem in sieben gesetzt. Jetzt wieder in den Tag, würden Sie tatsächlich Interaktion mit einer Datenbank in eine Schwarz-Weiß-Terminal-Fenster an eine blinkende Eingabeaufforderung wie diese. Und die Datenbank, die wir auf die laufen Gerät wird als MySQL, das ist, freie und Open-Source-Datenbank-Engine. Wenn Sie Google und lesen Sie den Wikipedia Artikel, werden Sie wissen, dass der Name ein bisschen Übergang für einige Versionen von Linux. Maria Datenbank tatsächlich ein Gabel so zu MySQL zu sprechen. Lange Rede kurzer Sinn, Oracle kaufte MySQL. Oracle ist ein großes Unternehmen. Die Menschen haben es hätte besorgt nicht mehr ganz so bleiben, Open Source, so ist dies nur eine Kopie von MySQL ist, die noch frei ist, noch Open-Source-und in Fedora Linux standardmäßig installiert. Aber das ist eine Art Schmerz in der Hals, um mit einem Kennenlernen Datenbank auf diese Weise. Also haben wir in der CS50-Appliance enthalten eine kostenlose Open-Source-Tool namens phpMyAdmin. Nur ein Zufall, dass es ist in PHP geschrieben. Es gibt keine Grund müssen für PHP hier. Aber das ist nur ein Web-basiertes Tool, das wir kostenlos heruntergeladen, installiert das Gerät, das uns zu haben, kann ein graphischen Benutzerschnittstelle, mit der um die p-set sieben Datenbank mit erforschen die neue Datenbanken zu erstellen, sagen für die eigene Abschlussprojekt, wenn du würdest wie, und letztlich dynamische Websites wie CS50 Finanzen , die Sie zur Abfrage von Daten zu ermöglichen und Daten dynamisch zu aktualisieren. Sie sind nicht zu verwenden, damit nur eine einfache Textdatei oder CSV. Sie können tatsächlich eine intelligente Datenbank Programm, so dass Sie mehr ausführen kann anspruchsvolle Anfragen als nur das Lesen durch alles, was linear. So zum Beispiel, das ist, was wir geben Sie aus der Box für p-set sieben. Dies ist eine Tabelle mit zumindest scheinbar drei Spalten, von denen eine Benutzername, von denen einer Hash, und der andere davon ID. Aber die interessante Sache, und nur um necken, ein Gedanke hier, den Benutzernamen ist vermutlich schon einzigartig, oder? Ich meine, die meisten jede Website, wenn Sie müssen einen Benutzernamen, gibt kann nicht zwei Cäsaren sein. Es kann keine zwei malans sein. Es kann keine zwei jharvards sein. Seine einzigartige. Ansonsten wissen sie nicht, was jharvard es tatsächlich ist. Also, was könnte die Motivation für die auch sein mit einer dritten Spalte von links dort angerufen ID, die aussieht wie ein Nummer, die ähnlich einzigartig ist? Es fühlt sich ein wenig redundante zu mir auf den ersten Blick. Warum könnte es zwingend zu haben nicht nur einzigartig, Benutzernamen, sondern auch einzigartige Zahlen? ZIELGRUPPE: Sie hätten das gleiche Passwort. DAVID MALAN: Menschen haben könnte das gleiche Passwort, sicher. Das könnte durchaus passieren. Aber wenn sie diese einzigartige Benutzernamen haben, habe ich würde behaupten, dass das nicht wirklich Egal, denn wenn sie in ihrer Art Benutzername, brauche ich nur zu prüfen, ihre vergessen, ihre Hash davon. Warum sonst? ZIELGRUPPE: Schneller suchen. DAVID MALAN: Schneller suchen. Warum? ZIELGRUPPE: ID ist nur eine. DAVID MALAN: ID ist nur ein Zeichen, oder um genauer zu sein, es ist eine Nummer, so ist es wahrscheinlich 32 Bit oder so ähnlich. Während der Benutzername, offenbar Jason Hirschhorns da oben ist eine Art lächerlich lange, und es wird nimm mich viel mehr Zeit in einen String Vergleichen H-I-R-S-C-H-H-O-R-N, und vielleicht a / 0 oder so etwas, um Jason zu schauen, im Gegensatz zu nur geben Sie mir sagen Benutzer Nummer zwei. Das ist 32 Bit. Es ist ein einziger, dass INT Sie haben zu vergleichen. Und in der Tat, das ist genau, warum Datenbanken neigen dazu, eindeutige IDs zuweisen Zeilen in ihnen. Jetzt gibt es was andere Datentypen sind neben INT und scheinbar Zeichenfolgen wie diese? Nun, zu mehr richtig, SQL-Datenbanken, wie MySQL, haben CHAR-Felder. Und Saibling ein wenig irreführend ist nicht eine einzelne CHAR. Eine CHAR-Feld in einer MySQL-Datenbank ein oder mehrere Zeichen, aber es ist ein feste Anzahl von Zeichen. So zum Beispiel, wenn ich gehe zu phpMyAdmin, wie Sie vielleicht schon haben, oder bald wird ein Problem stellte sieben, und ich gehe zu meiner Datenbank, und nur zum Spaß, Lassen Sie uns eine neue Tabelle namens erstellen testen, mit nur zwei Spalten. Ich werde dann auf Go. Und das wird ziemlich vertraut zu werden, allem, wie Sie basteln um auf eigene Faust. Hier könnte ich geben ID erstellen eine neue Tabelle vom Typ INT. Aber hier könnte ich den Benutzernamen eingeben neu, dass früher Tisch. Und feststellen, ich habe eine ganze Reihe von Typen zur Auswahl. Und auch das ist, warum phpMyAdmin ist irgendwie schön. Es ist eine Art Selbstlern Sie in diesem kann nur irgendwie Punkt, und klicken Sie auf, und Blick auf Dropdown-Menüs, und leiten aus dass das, was Kräfte SQL gibt Ihnen. Und in der Tat, wenn ich wählen CHAR, habe ich dann haben, um die Länge, oder wie angeben viele Werte, wie viele CHAR. So sehr die gemeinsamen Werte sind Dinge wie 255, aber das ist ein wenig lang. Häufig ist acht nach einem Benutzernamen. Aber das ist ein wenig klein, in diesen Tagen. Also das ist eine Design-Entscheidung. Ist es maximal 8 Zeichen, 32, 255, 1000? Es ist wirklich an Ihnen. Aber ein CHAR-Feld eine feste Zahl. So wählen Sie zu wenig und Sie sich irgendwie sind verschraubt, wenn Sie eine längere Benutzername möchten. Wählen Sie zu viele und was der Nachteil? ZIELGRUPPE: [unverständlich]. DAVID MALAN: Es ist verschwenderisch. Genau wie in C, wenn Sie eine größere haben Teil des Speichers als Sie brauchen, sind Sie nur Zeit und Platz verschwenden. So als Alternative besteht VARCHAR, die dieses Problem löst, Behandlungslänge nicht als fester Länge, sondern als eine maximale Länge, und mit einem variable Anzahl von Chars, die dann neigt dazu, nur so viele, wie Sie CHAR verwenden tatsächlich braucht. Das klingt perfekt. Warum nicht bekommen wir von der RID Char-Datentyp dann? Was könnte die Kehrseite der sein Verwendung VARCHARs, das klingt wie es ist ein schöner Sieg? Ja? ZIELGRUPPE: [unverständlich]. DAVID MALAN: OK, gut. Also, wenn Sie alle Ihre Daten ist die gleiche Länge, was ist das Anliegen? ZIELGRUPPE: Weil Sie verschwenden Daten, indem er sie alle. DAVID MALAN: Also, wenn Sie alle Ihre Daten die gleiche Länge, aber ich würde behaupten, dass die Angabe eines maximalen Länge auf VARCHAR unterscheidet sich nicht von Angabe einer festen Länge auf, wenn CHAR Sie wissen, dass die Zahl im Voraus. Aber es ist in der Tat, und ich werde eine Art Auszug aus dieser Antwort die Realität dass es immer noch ein max, was könnte ärgerlich, vor allem, wenn Sie begegnen den Namen einer Person, die es ungewöhnlich lange, dass man nicht tat antizipieren. Und es ist auch ein wenig weniger effizient tatsächlich auf VARCHARs suchen, wie Gegensatz zu CHAR suchen, vor allem für lange Tische, die viel haben und viele Daten. So ist auch hier wieder thematische keine offensichtliche Wahl. Also nur, um Ihnen ein Gefühl der anderen geben Datentypen, die von Interesse sein könnten entweder p-gesetzt sieben oder in die Zukunft, gibt es INT. Es gibt BIGINT, die ist wie lange lange. Es neigt dazu, 64 Bits. Es gibt DECIMAL, die Sie sehen in das Problem Satz, der ein viel ist Reiniger Antwort auf Probleme, die wir mit Schwimmer-und variabel auftreten Punkt Ungenauigkeit. Und dann gibt es DATE. Es ist buchstäblich ein Datentyp, hat wie ein Jahr zurückblicken, einen Monat, ein Tag, und eine Stunde, Minute und Sekunde. Aber auch SQL-Datenbanken Dinge, die wir Indizes nennen. Und ein Index ist etwas, das Sie angeben, wenn Sie die Tabelle, um machen sucht und andere Operationen effizienter. Genauer gesagt, es gibt so etwas wie Der Primärindex, dass man wie folgt deklarieren. Wir haben dies für Sie mit der Benutzer-Tabelle geben wir Ihnen. Beachten Sie aber, wenn ich manuell neu zu die Benutzer-Tabelle geben hier es ein Name, der Nutzer. Ich habe bereits angegebenen ID. Ich angegebene INT. Ich angegebenen Benutzernamen mit maximal 32 Zeichen. Aber wenn wir immer in dieser Scrollen ziemlich breites Fenster, gibt es eine Ankündigung Haufen anderer Dinge, die ich angeben können. Man, ich kann Attribute angeben wie Sie wissen, was diese INT UNSIGNED sein sollte. Ich will nicht, negative Zahlen, so machen wir es UNSIGNED. Null ist hier nicht relevant, da Ich möchte es jedem Benutzer, haben eine eindeutige Nummer. Ich weiß nicht, dass es null sein. Aber dies ist interessant. Ich kann angeben, dass ID ist entweder die Primärschlüssel der Datenbank, oder es ist einzigartig, oder es ist indiziert oder Volltext. Also für die heutigen Zwecke, lange Geschichte Kurz gesagt, bedeutet, dass diese PRIMARY wird sein, sowohl konzeptionell als auch technisch das Feld, das wir verwenden, um eindeutig Benutzer identifizieren. Also, wenn wir schauen Nutzer, ist diese Art ein Versprechen, um sie vor allem von nachschlagen dass eindeutige Kennung. Und die Datenbank wird sichergestellt, dass, wenn Sie eine Benutzernummer 3, kann man nicht physisch anderen Benutzer einfügen mit der gleichen Zahl 3 ist. Die Datenbank wird nur verweigern , um Ihre Änderungen zu speichern. Welches ist eine gute Sache, da kann man schützen Sie sich vor sich. Selbst Alternativ kann für Benutzernamen ein. Also die zweite Zeile, Rückruf, ist das Feld Benutzername. Also die zweite Reihe ist hier Benutzername, wie wir es auf der anderen dort gelassen. Also, was sonst noch möchte ich angeben? Ich darf nicht nach SQL, zu zwei Primärschlüssel angeben. Sie können einen gemeinsamen Schlüssel in dem Sie festlegen Blick auf die beiden Felder, aber sie können nicht Primärschlüssel individuell sein. Also das ist nicht die Rede. Also, was kann ich wählen? Nun, das ist UNIQUE im Geiste ein Primärschlüssel angeben, wo Sie diese Feld muss eindeutig sein, aber es ist nicht dabei, das sein Ich verwende die ganze Zeit. Und wir gehen nicht, dieses zu verwenden alle die Zeit, aus welchem ​​Grund wieder? Es ist möglicherweise langsamer, wenn es ist eine lange Benutzernamen ein. Es ist nur eine Verschwendung von Zeit. INDEX dessen gibt an, dass es nicht eindeutig sein, aber ich würde gerne Sie Ihre Magie unter dem Arbeits Haube, um es schneller für mich zu machen Suche auf diesem Gebiet. Also das ist wahrscheinlich nicht relevant. Für Benutzernamen, würde ich argumentieren, dass UNIQUE ist eine gute Antwort. Aber nehmen wir an, dass wir die Nutzer, die mehr interessanter als nur Benutzernamen, Hashes und ID-Nummern. Was, wenn wir Menschen voller Namen gab? Was ist, wenn wir ihnen Adressen und andere Daten über sie? Nun, wenn Sie angeben, dass eine Spalte in eine Datenbank indiziert ist, bedeutet das, dass MySQL oder Oracle, oder was auch immer-Datenbank Sie sind, sollten ihre Magie zu arbeiten und eine Art von Phantasie-Daten Struktur wie ein Baum oder ein Trie oder eine Hash-Tabelle, oder etwas zu garantieren, dass, wenn Sie für die Datensuche mit Wählen Sie auf diesem speziellen Gebiet - zeigen mir, wie jeder, dass lebt auf der Oxford Street. Eine Abfrage so. Wenn Sie im Voraus festgelegt haben, dass Sie einen Index auf diesem Feld will die Recherchen werden viel, viel schneller sein. Wenn Sie einen Index, der beste nicht angeben Sie tun können, ist eine lineare Suche, wenn es ist nicht sortiert. Aber wenn Sie INDEX, die Smart angeben Menschen, die die Datenbank vorgenommen - Menschen wie Sie, die wissen jetzt, Bäume und Versuchen und Hash-Tabellen - wird eine solche Daten automatisch erstellen Struktur im RAM, um sicherzustellen, dass diese Recherchen sind viel schneller. FULLTEXT inzwischen ist im Geiste, aber können Sie tun, Wildcard sucht, wie mir zeigen, dass jeder lebt in Straßen, die mit dem Beginn Buchstabe O aus welchem ​​Grund. Sie können Platzhaltersuche zu tun so. Oder, überzeugende Dinge wie Show mir alle, die das Wort hat - zeigen mir, jeder, dessen Name beginnt mit einem bestimmten Buchstaben. Sie können nach Schlüsselwörtern suchen in dieser Weise. In Ordnung. Also, Gestaltungsmöglichkeiten es möglicherweise. Es gibt andere, dass ich Wellen meine Hände an. Es stellt sich heraus, dass man haben kann verschiedene Speicher-Engines. Und das ist mehr, als wir brauchen geheimnis sicherlich für Problem stellte sieben. Standardmäßig werden euch mit so etwas wie InnoDB. Du wirst sehen, Erwähnung dieses irgendwo in phpMyAdmin-Schnittstelle am wahrscheinlichsten. Aber wissen, dass es andere Design Entscheidungen, die von potentiellen sind Interesse kommen, wenn Abschlussarbeiten Sie etwas webbasierte tun. Aber lassen Sie uns dies tun. Lassen Sie uns gehen Sie vor und setzen Sie dieses auf die Bildschirm als Teaser für eine Geschichte mit du, ein Mitbewohner, und ein Glas Milch. Werfen wir einen 2 Minuten oder so brechen hier. Und wenn Sie dableiben können, lassen Sie uns kommen zurück, sich ein bisschen mehr an SQL und dann ein wenig mit JavaScript p-Set acht im Auge. In Ordnung. Also, lassen Sie zum Nachdenken über eine Ecke Fall, die sehr leicht entstehen können, im Zusammenhang mit der Verwendung einer Datenbank oder ehrlich gesagt, auch nicht mit der realen Welt Dinge wie Geldautomaten, um Geld zu bekommen. Also hier ist ein Kühlschrank. Angenommen, Sie haben in einem zu Ihr Wohnheim oder Ihrem Haus. Und Sie eine Mitbewohnerin, und beide haben Sie wirklich, wie zum Beispiel Milch. So können Sie zu Hause von der Klasse eines Tages kommen. Er oder sie ist noch nicht zurück. Sie öffnen den Kühlschrank. Sie wollen wirklich ein großes Glas Milch. Es gibt keine Milch. Also, was tun Sie? Sie schließen den Kühlschrank. Sie packen Ihre Schlüssel. Sie gehen auf den Platz. Und Sie in Einklang zu bekommen bei CVS an diejenigen, Self-Checkout-Dinge, die immer länger als eigentlich mit Kassierer. Wie auch immer. Also, mittlerweile, Punkt Punkt Punkt, Ihre Mitbewohner nach Hause kommt, und er oder sie ähnlich hat ein Verlangen um etwas Milch. So er oder sie öffnet den Kühlschrank, schaut nach innen, und oh, verdammt. Keine Milch. So er oder sie geht heraus, passiert zu gehen zum anderen CVS, die nur ein blockieren weg aus irgendeinem Grund, und er oder sie in Einklang bekommt, um Milch zu kaufen. Inzwischen, nach Hause kommen Sie, er oder sie kommt nach Hause, und was zu tun Sie letztendlich haben? Doppelt so viel Milch. Aber Sie wissen nicht wirklich wie Milch so viel. So, jetzt so viel Milch, dass jetzt haben Sie einer von ihnen ist gerade dabei, sauer schließlich. Also das ist eine wirklich schlechte Problem. Right? Also, was ist passiert? Also grundlegend ist diese Art eines lächerlichen Beispiel. Aber unter der Haube, was wir gehabt haben hier geschehen ist, beide von Ihnen geprüft der Zustand einige Stück Speicher, der Kühlschrank. Beide von Ihnen überprüft den Zustand einer Variablen. Sie beide zog ein Fazit dass Sie dann handelte. Aber leider, während Ihre Mitbewohner war im Laden, der Zustand, dass Variable verändert, er oder sie kam zurück und will nun den Zustand zu ändern, aber es ist schon geändert worden auf ihn oder sie. Und natürlich, er oder sie nicht hätten gegangen, um den Laden, wenn sie wüssten Sie waren bereits auf dem Weg. So in der realen Welt, wie konntest du dieses Problem zu vermeiden, vorausgesetzt, Sie haben Kühlschrank, müssen Sie einen Mitbewohner, und Sie eigentlich gern Milch? ZIELGRUPPE: Kommunikation. DAVID MALAN: Kommunikation. OK. Aber wie können Sie kommunizieren? ZIELGRUPPE: Lassen Sie eine Notiz. DAVID MALAN: Lassen Sie eine Notiz, oder? Lassen Sie immer eine Notiz für Fans der Serie. Alles klar, so dass immer eine Nachricht hinterlassen, oder setzen wirklich wie ein Vorhängeschloss oder etwas auf dem Kühlschrank, die Ihren hält Mitbewohner von der Überprüfung des Zustands der dass variable. Nun, warum könnte dies Germane zu sein Problem stellte sieben oder Geldautomaten. Nun, stellen Sie sich eine Welt, in einem Geldautomaten, wo Sie könnten gehen bis zu einem Geldautomaten sein Maschine hier, und ein anderer ATM hier. Und das passiert ziemlich oft. Und wenn Sie zwei ATM-Karten hatten, Das ist möglich, zu erhalten. Und Sie in beiden Maschinen einloggen gleichzeitig wirksam, hoffentlich während niemand hinsieht. Und dann haben Sie Ihre PIN eingeben etwa gleichzeitig. Und dann haben Sie eine Balance Abfrage zu tun um zu sehen, wie viel Geld Sie haben. Und lassen Sie uns sagen, Sie haben $ 100 in Ihrem Konto übrig. So im Wesentlichen gleichzeitig, Sie sagen, eins, null, null, geben. Und Sie hoffentlich wieder etwas Geld. Aber wie viel Geld könnte man zurück? Jetzt Computer am Ende des Tages, vor allem, wenn sie auf ein Gespräch Server, nicht unbedingt Dinge zu tun in der Reihenfolge, ist zu erwarten. Also nehme, was passiert, weil der unabhängig von der Netzwerkgeschwindigkeit Probleme gibt sind, oder CPU Fragen da sind, oder so etwas, nehme an, dass die ersten ATM prüft Ihre Balance und sieht, oh, hat diese Person 100 Dollar. Aber dann abgelenkt wird, weil vielleicht ein Backup geschieht, und so ist es Verlangsamung. Oder vielleicht während der Überprüfung, die Netzwerk Verbindung ein wenig langsamer, da bekam dies passiert einfach. Sie sind physische Geräte. So Währenddessen wird die zweite ATM- die gleiche Frage. Wie viel Geld haben David? 100 $ ist die Antwort. Aber da die erste ATM noch nicht schickte die Nachricht subtrahieren $ 100, beide Geldautomaten sind Gewölbe der Bank geprüft, sehen gibt es 100 $ gibt, und jetzt beide Maschinen sind potenziell werde ausspucken eine Antwort. Nun, dies ist ideal für Sie, in einem gewissen Sinne wenn das, was die Bank tut, letztlich wird, ändern Sie den Betrag auf minus 100 durch Setzen der Variable gleich Ihre Bankkonto gleich 0 ist, im Gegensatz zu tun, minus 100. Jetzt im schlimmsten Fall für die Bank - oder im besten für die Bank, inzwischen sie geben Ihnen $ 200, und Ihr Bankkonto zeigt nun negativ $ 100, das ist wirklich nicht Sie profitieren überhaupt. Aber der Punkt ist, dass dieses Rennen Bedingung für zwei Mitbewohner bekommen Milch, oder für zwei Geldautomaten versucht, Bargeld zu bekommen und ändern Sie den Zustand der Gewölbe gleichzeitig besteht irgendeine Mal, wenn Sie eine Datenbank haben. Jetzt in Problem stellte sieben, dieses Problem zu entsteht in dem Sinne, dass, wenn Sie einen kaufen Aktien von Facebook-Lager, und dann B. Sie einen zweiten Anteil kaufen Face Lager, müssen Sie sicherstellen, eine Entscheidung, den Programmierer. Um zu entscheiden, wie ein Update der Datenbank, Chancen sind Sie gehen zu haben eine Zeile für diesen Bestand, und das ist eine Möglichkeit, sie umzusetzen. Und Sie gehen zu einem Anteil von gerade FB, die ihre Aktien Ticker-Symbol ist für dieses Benutzernamen oder dieses Benutzers ID, die eindeutige Kennung. Aber die gleiche Geschichte kann hier passieren. Wenn Sie eine SELECT in SQL zu tun, wie Sie sehen werden Problem in sieben gesetzt, wenn Sie sehen, oh, hat David 1 Aktie von Facebook-Aktien. Lassen Sie mich dies ändern, um zwei Aktien erfolgen, weil er kaufen will ein zweite Aktie. Aber angenommen, David hatte tatsächlich zwei Browser-Fenster zu öffnen, oder annehmen, dass es ist ein Gemeinschaftskonto mit zwei Ehepartner, und beide von ihnen auszuführen versucht die gleiche Operation, auch dort die Potenzial für eine Entscheidung zu sein existiert basierend auf der vorherigen hergestellt Zustand der Welt - das Konto one share - und beide Personen, oder beide Server, jetzt versuchen zu sagen, es erhöhen, um zwei Aktien. Aber in diesem Fall können Sie geladen haben mir Geld für beide Aktien, aber erhöht, genau das zu einer Zeit. Also kurz gesagt, das grundlegende Problem hier, wie mit dem Witz über ein Verlassen beachten, oder indem ein Vorhängeschloss auf sie ist wenn zwei Menschen oder zwei Threads - denken Sie zurück zu kratzen - den Zustand einer Variablen zu inspizieren und dann versuchen, diese Variable ändern, aber diese beiden Dinge nicht passieren, bei der Gleichzeitig aber unterbrochen bekommen können durch andere Dinge passiert, können Daten bekommen in einem sehr seltsamen Zustand. Und Sie profitieren können, oder Sie leiden im Sinne des Geld Beispiel. So in Problem stellte sieben, geben wir Ihnen Diese eine Zeile Code, die lange Geschichte kurz, löst dieses Problem in MySQL. Diese sehr lange Anweisung, die nicht funktioniert sogar auf eine Linie auf die passen Bildschirm hier sicher, dass Ihre Betriebs ist, was Atom genannt. Es geschieht alles auf einmal, oder es überhaupt nicht passieren. Diese sehr langen Satz kann nicht teilweise unterbrochen zu werden. Und was sie tut, ist buchstäblich was es sagt. Legen Sie in eine der folgenden Tabelle diese drei Felder bestimmte Werte, sondern auf doppelten Schlüssel, nicht tun, einen Einsatz. Haben ein Update. Das ist also ähnlich wie bei der SELECT-und ein INSERT, um so in der gleichen Zeit zu sprechen. Und was ist der Schlüssel, die wahrscheinlich wobei hier genannten? Es stellt sich heraus, und Sie werden sehen, diese in Problem stellte sieben der spec, weil wir haben dort ein eindeutiger Schlüssel sein, erklärte an diesem Tisch, so dass Sie können nicht mehrere Zeilen für den gleichen Benutzer die elbe Penny-Stock-Symbol - in diesem Beispiel hier ist DVN.V eine dumme Penny Stock, die wir finden Sie in der Spezifikation. Denn wir haben es erklärt, einzigartig zu sein, bedeutet dies, dass, wenn Sie versuchen, eine doppelte Zeile einzufügen, sind Sie stattdessen gehen, um es zu aktualisieren, ohne jemand anderes eine Chance zu ändern der Zustand der Welt nicht. Also kurz gesagt, sorgt diese Dinge sind atomar. Generell aber, Datenbanken wie MySQL - und Sie diese Funktion nicht brauchen, für p-set sieben, aber denken Sie daran, für die Zukunft - unterstützen, was werden Geschäfte bezeichnet, wo Sie sagen können START TRANSACTION wörtlich. Sie können dann ausführen zwei SQL-Anweisungen. Und eine SQL-Anweisung, wie Sie sehen werden in p-set sieben, sieht ein wenig so etwas. Aktualisieren Sie eine Tabelle namens Konto. Den Balance-Spalte gleich, was auch immer der Saldo derzeit Spalte minus 1000, wo die Anzahl der Kontonummer, wie die Benutzer-ID, gleich 2 ist, und aktualisieren Sie dann Konto Punkt Punkt Punkt. So in juristischer Hinsicht, was haben diese beiden Fragen scheint in das Tun werden realen Welt Sinn für Banking? ZIELGRUPPE: Übertragen zu Einsparungen. DAVID MALAN: Genau. Die Übertragung der Mittel von einem Konto zum anderen. Und das ist ein weiteres Beispiel, wo Sie diese beiden Dinge wirklich passieren soll oder nicht passieren. Sie wollen nicht, etwas zu bekommen in die Mitte von ihnen und möglicherweise versauen die Mathematik oder mess up, wie viel Geld Sie haben, oder wie viel Geld, das die Bank hat. Also, was ist wirklich schön zu Transaktionen in MySQL ist das, und Datenbanken allgemein ist, dass sie und intelligente Menschen, die implementiert haben diese Funktionen herauszufinden, wie man sicher, dass diese beiden Dinge geschehen oder nicht. Und wenn Sie wirklich anstreben, machen eine Website, die von Menschen auf der verwendet wird, Campus, die Menschen in der realen Welt zu tun etwas in der Start Sinne Dies sind die Arten von Design-Entscheidungen, werden immer so wichtig. Ansonsten starten Sie Daten verlieren, verlieren Benutzer, oder im schlimmsten Fall als wir hier gesehen habe, möglicherweise Geld verlieren. Also noch einmal, mehr dazu in Problem eingestellt Sieben sowie vielleicht einige Sie in der letzten Projekte. Also lassen Sie uns das Bild hatten wir ändern vor einem Augenblick nur in eine weitere Möglichkeit. Lassen Sie mich also tatsächlich sehen, wenn ich kann - Nö, das ist weg. Da ist es. Also das ist, wo wir letztes Mal links. Und es stellt sich heraus, wir werden werfen eine weitere Sache, in die Mischung hier - eine Sprache namens JavaScript. So JavaScript passt eigentlich in diesem Stück - und ich wusste nicht recht sollten Sie genug Platz, so ist dies jetzt nicht maßstäblich. OK, das ist wirklich erbärmlich. OK, das ist also kein JavaScript. Gut. Ich bin wirklich tut es einen schlechten Dienst. Gut. So ist ein weiterer JavaScript-Programmierung Sprache und unsere letzte, wenn das hilft zu versichern, dass es nicht viel mehr der Hydranten hier. So ist auch ein JavaScript interpretiert Sprache, die bedeutet, dass Sie nicht zu tun kompilieren Sie es in Nullen und Einsen. Sie führen es einfach. Aber was ist grundlegend anders mit JavaScript Regel ist, dass Sie führen Sie es nicht auf Ihrem Web-Server. Es ist nicht in der laufen bekommen Gerät an sich. Vielmehr wird von einem Benutzer heruntergeladen wird über HTTP in ihren Browser - Chrome, Safari, Internet Explorer, Firefox, was auch immer - und es ist der Browser, der diese ausführt bestimmten Programmiersprache. So klar zu sein, PHP war bisher ausgeführt, entweder in der Befehlszeile in unsere Schwarz-Weiß-Fenster, auf einem Server wie das Gerät, einen Computer mag das Gerät, oder es ist schon von einem Web-Server ausgeführt auf einem Computer läuft. Aber das Thema ist hier, dass PHP bisher ausgeführt wurde, Server-Seite, so dass und der Benutzer den Browser des Benutzers sieht nie eine Zeile PHP-Code. In der Tat, wenn Sie jemals einen Browser zu öffnen für Ihre Website oder eine andere, und Sie tatsächlich sehen, PHP-Code in Ihrem Fenster, hat jemand oben geschraubt. Weil es nicht sollen sein zu einem Browser direkt gesendet. Es soll hingerichtet und gedreht werden in so etwas wie HTML. Aber JavaScript ist im Wesentlichen das Gegenteil. Es soll in der Regel innerhalb ausgeführt werden Browserfenster eines Benutzers. Und welche Arten von Websites verwenden JavaScript dann in diesen Tagen? Wie buchstäblich jedem beliebtesten Website. Jede Website, die euch wahrscheinlich täglich benutzen, verwenden JavaScript für die einfachste und auch der sexiest Funktionen. So etwas wie Facebook Chat, wenn Sie dafür verwenden. Wie funktioniert das eigentlich? Nun, so weit, all das, was wir haben mit HTML gemacht und PHP nimmt an, dass Sie ziehen eine URL, und Sie die Eingabetaste drücken, und Sie sehen, einige HTML-Inhalte. Und Sie den Link, dass die Änderungen auf URL wechselt die Seite, und lädt einige neue Inhalte. Klicken Sie auf eine andere URL oder ein Formular, können Sie zu einer anderen Seite gewischt bekommen und Sie sehen einige neue Inhalte. Aber mit so etwas wie Facebook Chat, oder GChat oder Google Maps, nur selten nicht die ganze Seite neu zu laden, so dass Sie vorübergehend ein weißer Bildschirm zu sehen und dann neue Inhalte. Vielmehr Webseiten sind heute dynamisch immer wieder aktualisiert und wieder und wieder alle Art von hinter den Kulissen. Und es stellt sich heraus, dass, wenn Sie zu gehen etwas wie Facebook oder GChat, oder Gmail, und die Seite Aktuelles automatisch ohne Nachladen der gesamten Bildschirm, was passiert ist, dass Ihr Browser hat irgendwie heimlich zusätzliche HTTP-Anforderungen - nicht für die gesamte Web-Seiten, aber nur für kleine Datenmengen, wie die Instant Message, dass Ihr Freund gerade Sie gesendet oder den Status zu aktualisieren, dass jemand gerade geschickt Sie, oder den Tweet dass jemand gerade geschickt. Es ist nur so wenig Anträge auf Daten, und dann mit JavaScript Programmiersprache, zu ändern, was die Web-Seite sieht aus wie ohne die Server helfen, ohne dass der Server Erzeugen, dass HTML. Also kurz gesagt, kann dann verwendet werden JavaScript nicht nur holen neue Daten aus der Server ohne Nachladen eine ganze Seite oder ein Formular. Es kann auch verwendet werden, um zu ändern die sogenannte DOM - Document Object Model - Das ist nur die Phantasie Weg für sagte der Baum des HTML dass wir das letzte Mal gesehen Zeit. So zu beruhigen, ist JavaScript syntaktisch so ähnlich C als gut. Es gibt keine Hauptfunktion. Sie müssen nur mit dem Schreiben beginnen Sie den Code und es wird ausgeführt, erhalten oder mehr richtig interpretiert. Bedingungen wird wie folgt aussehen. Nicht anders als C oder PHP für diese Angelegenheit. Boolesche Ausdrücke oder-ed zusammen wird wie folgt aussehen. Anded zusammen wie folgt aussehen. Schalter wird wie folgt aussehen. For-Schleifen wird wie folgt aussehen. While-Schleifen wird wie folgt aussehen. Do while-Schleifen wie diese aussehen wird. Das ist neu. So JavaScript hat nicht eine foreach Konstrukt per se, sondern dieses Konstrukt für variable i in Array und ich in diesem Fall wird ein Indexwert. So ist es ein wenig anders aus, dass foreach, wenn neue Versionen JavaScript kommen aus die ganze Zeit, so auch diese Sprache verfügt weiterentwickelt werden. Und so nebenbei, JavaScript in diesen Tagen Außerdem können auf einem Server wie verwendet werden PHP mit einem Framework namens Node.js. Einer der CS50 TF, Kevin, hat dazu geführt, eine Seminar über Node.js, die verfügbar ist auf cs50.net/seminars. Also, wenn Sie neugierig sind, wissen, dass Sie kann dies auf der Server-Seite verwenden, wie gut, aber das ist ein ziemlich neuer Trend, sondern ein mächtiges dazu. Dies ist ein wenig anders. Dies ist ein Array in JavaScript. Und was fällt Ihnen als unterschiedliche im Vergleich zu C oder PHP? Es gibt ein paar schnelle Geschichten können wir hier erzählen. Was ist im Vergleich zu PHP fehlt? ZUSCHAUER: [unverständlich]. DAVID MALAN: Ja? Sorry, noch einmal sagen? ZUSCHAUER: Nicht erklärte den Typ der Variablen. DAVID MALAN: Wir sind nicht erklärt den Typ der Variablen. Also eigentlich ganz wie PHP, sind wir nicht Angabe der Typen dieser Variablen. Vielmehr sind wir mehr generisch sagen var für variable. Wir haben noch keine PHP Ärgernis der Dollar-Zeichen, die zwar mühsam, Typ, nicht mehr machen klar, dass etwas ist eine Variable. Während hier, wir sind irgendwie zurück zu C-Ansatz nur durch Aufruf einer Variable mit dem Namen wollen wir zu geben, wie Zahlen. Und auch wie PHP, haben wir eckigen Klammern für die Werte in diesem Array. So Variablen in JavaScript auch könnte wie folgt aussehen. Beachten Sie hier das ist ein String genannt s, aber ähnlich wir nicht angegeben haben dass es ein String. Hier aber ist ein Feature, das nicht existiert in genau der gleichen Weise in PHP, aber ein bisschen ähnlich. Dies ist ein Objekt in JavaScript. Und Objekte sind eine Art der Schweizer Armee Knife einer Datenstruktur, dass Sie können sie für eine beliebige Anzahl von Dingen zu verwenden. Hier zum Beispiel, wir erklären eine Variable namens zitieren. Der Typ dieser Variablen ein Objekt ist. Sie können dies als eine C-Struktur denken das hat Schlüssel und Werte. Symbol ist ein Schlüssel. FB ist ein Wert, offenbar a symbol. Comma. Der Preis ist ein weiterer Schlüssel, und sein Wert ist offenbar eine Gleitkomma oder ein Anzahl allgemeiner in JavaScript von 49,26 $. So PHP nicht - haben wir nicht in PHP-Objekte gesehen recht wie diese, aber wir sahen ein analoges, , das war was? ZUSCHAUER: [unverständlich]. DAVID MALAN: Assoziative Arrays. Während also PHP hat assoziative Arrays deren Syntax jemals etwas so anders - sahen wir die eckigen Klammern. Wir sahen die seltsamen Symbole Pfeile. JavaScript hat Objekte, aber dies ist meist eine semantische Differenz und eine verschiedenen Synonym für jetzt. Doch als beiseite, PHP hat auch Objekte in einer Weise, dass Java und andere Sprachen haben Objekte in objektorientierten Programmierung. Aber wir nutzen diese nur für die Datentypen für jetzt. Objekte und assoziative Arrays. Dies könnte man es ein wenig klarer. Hier ist, warum ein Objekt ist nützlich. Wenn Sie einen Schüler erklären wollen, wie Zamyla, können wir tatsächlich kapseln so nach innen davon sprechen Objekt mit geschweiften Klammern wie vor einem ganzen Bündel von Schlüsseln und Werte in hier. Wir haben eine ID, ein Haus und einen Namen für Zamyla, durch ein Semikolon wie folgt üblich am Ende. Hier unten ist auch dies leicht anders, aber auch sehr mächtig in diesen Tagen. Hier ist ein Array, und ich weiß, dass da es gibt eine eckige Klammer up Top und eine eckige Klammer an der Unterseite. Und dies ist eine Anordnung, welche Daten geben offenbar in JavaScript? Dies ist ein Array von sieht wie drei Objekte. Und ich weiß, dass es nur ein Objekt ist wegen der geschweiften Klammern. Und feststellen, es ist offen geschweifte Klammer, einige Sachen, in der Nähe geschweifte Klammer, Komma, dann etwas mehr, Komma, und dann einige mehr. Also das ist drei Argumente durch zwei Kommas getrennt. Also das ist ein Array von drei Objekten. Und jedes dieser Objekte zu sein scheint ein Student oder Mitarbeiter der einige Art, mit einer ID jeweils Haus und Name. Aber ich habe diese so genannten JSON genannt - JavaScript Object Notation. Und das ist ein Datenformat, das eigentlich ist so sehr beliebt und in Mode in diesen Tagen, dass wenn Sie ein Schreiben Anwendung, die die Facebook nutzt API, die Twitter-API, wirklich fast jede API gibt in diesen Tagen, darunter einige der CS50 eigenen, die Daten, die Sie erhalten, ist nicht in alten Schule CSV-Format. Da erinnere sich, dass CSV ist super einfach. Es ist nur Säulen getrennt durch Komma. JSON-Daten gibt Ihnen mehr Metadaten. Es verbindet einen Schlüssel mit jedem Wert, so sie haben nicht nur davon ausgehen, dass die nullte Spalte ist ein Wert, Spalte eine ist eine weitere, zweite Spalte ist eine andere. Alles in einem JSON-Objekt hier ist eine Art von Selbst-Beschreibung, denn jeder einer der Namen in dieser Datei hat buchstäblich davor Namen als Anführungszeichen. Werfen wir also einen Blick auf ein paar Beispiele. Lassen Sie mich in das Gerät zu gehen. Und lassen Sie mich in unsere vhost gehen Verzeichnis in der Öffentlichkeit. Und lassen Sie mich in der go JavaScript-Verzeichnis. Und lassen Sie uns fortfahren und eröffnen dom-0.html, wo DOM bedeutet nur, Dokument-Objekt-Modell. Es ist der Baum, zu dem Zeug Ich vorhin sprach. Und lassen Sie mich folgendes vorschlagen. Hier ist eine Web-Seite, deren Körper ist ziemlich einfach. So, hier unten an der Unterseite, bemerken Ich habe ein Formular. Wir haben die nie gesehen. Es hat zwei Eingänge, von denen einer ein HAS ID der Name, von denen einer eine Art hat vorlegen, und die erste ein Typ ist der Text. Also das klingt eigentlich ziemlich einfach. Lassen Sie uns hier. Gehen wir zurück zu dieser Seite finden Sie hier. Lassen Sie uns in localhost gehen, und gehen in JavaScript unserem Verzeichnis, und gehen Sie zu dom-0, und hier haben wir dieses Formular. Also das ist offensichtlich Alle auf dieser Seite tut. Es hat ein Namensfeld mit eine Schaltfläche Senden. Aber ich werde mich nicht hier, PHP zu verwenden. Ich werde alles tun, Client-Seite so zu sprechen, in JavaScript wie folgt. Beachten Sie, dass ich in der Tat den Namen gegeben Bereich dieses Eingangs eine einzigartige Kennung, die wird tatsächlich rette mich einige Zeit in einem Augenblick. Und feststellen, ich habe ein anderes Tag eingeführt im Kopf meiner Web-Seite, die  -Tag. So ist es in diesem Sinne, dass JavaScript eine clientseitige Programmiersprache. In diesem Fall, so wie CSS, habe ich es gerade innerhalb meiner HTML. Beachten Sie aber, ich habe eine Funktion deklariert das sieht ein wenig wie PHP syntaktisch, aber das ist eigentlich JavaScript ist es, weil wieder Client-Seite in den Browser. Und nehmen Sie eine Vermutung, was das wird tun, auch wenn einige der Syntax hier ist neu. ZIELGRUPPE: Hallo zu sagen, wer auch immer. DAVID MALAN: Es wird um Hallo zu sagen wem auch immer besucht diese Seite. Also, wie? So bemerken, es stellt sich heraus in JavaScript gibt es ein alert ()-Funktion. Das ist eine sehr traurige Art von Funktion, die wirklich nur dazu neigt, Benutzer zu ärgern. Es ist nicht das Sie wirklich nutzen sollte in der Regel, aber es ist eine schnelle und schmutzige Art der Art von Druck etwas auf einer grafischen Benutzer Schnittstelle, wie ein Browser. Beachten Sie hier, dass ich habe eine Zeichenfolge in einfache Anführungszeichen. Es stellt sich heraus, dass im Gegensatz zu C, JavaScript tatsächlich haben Sie Single verwenden zitiert, und ehrlich gesagt, es ist nur eine Art der stilistischen Konvention unter JavaScript-Programmierer einfache Anführungszeichen zu benutzen. PHP, die sie tatsächlich haben leicht andere Bedeutung. Aber jetzt weiß nur, dass das ist der einzige Grund. Die Konvention in JavaScript ist oft zu einfache Anführungszeichen, aber wir nutzen könnten Anführungszeichen in beiden Orten. Also das ist interessant. Daran erinnern letzte Mal, dass wir hatten, dass Bild auf dem Bildschirm, die einen Baum zog wo Sie hatte den Knoten HTML, und die Kopf-Knoten und die Körperknoten, und dann einige Text. Aber es gab einen speziellen Knoten an der ganz oben, dass ich das Dokument genannt. Nun stellt sich heraus, in JavaScript, jede Mal, wenn Sie ein Programm in JavaScript zu schreiben in einem Browser haben Sie Zugriff auf eine besondere globale Variable. Im Geiste von PHP bei super dieser wird gerufen Kleinbuchstaben-Dokument. Es ist wie eine Struktur, aber diese Struktur hat auch Funktionen im Inneren. So eine C-Struktur hat nur Daten in der Regel. Aber ein JavaScript-Objekt, da dies technisch hat auch Funktionen, anders als Methoden bekannt, darin. Und Sie können eine Funktion innerhalb rufen diese Aufgabe ganz wörtlich tut sein Name, Punkt, und dann den Namen des die Funktion, oder auch Methode. Es ist nur ein Synonym, wirklich. Und was bedeutet diese Funktion? Sie können erraten Art aus seinem Namen. Holen Element von ID. Also, das wird die Web-Seite zu suchen, Suche den Baum, auf der Suche nach was Knoten, AKA-Element hat ein eindeutige ID Zitat unquote Namen. Und was soll ich tun? Ich werde, um den Wert zu erhalten Innenseite dass der Knoten in dem Baum, und ich werde irgendwie sagen hallo zu diesem Namen. So nehmen Sie eine Vermutung, auch wenn wir nicht haben sehen dies noch nicht, was zu tun das Plus Symbole bedeuten hier und hier wohl? ZIELGRUPPE: verketten. DAVID MALAN: verketten. Richtig, und das sind nur Art von Design-Entscheidungen Menschen gemacht vor Jahren. In PHP, verketten Sie Dinge mit Punkten. In C über mehrere Reifen springen, und Sie rufen Funktionen wie StrCopy () oder strcat () oder andere solche Funktionen. Aber in Javascript, verwenden Sie Pluspunkte. Also das ist nur die Verkettung drei Saiten - hallo, ein Name, und dann ein Ausrufezeichen. Also, wann und warum ist diese Funktion wenn auch genannt? Nun, nehmen Sie eine Vermutung von der HTML unten. Warum ist zu begrüßen () aufgerufen wird, oder wann? Offenbar, so gut ich kann sagen, auf vorlegen, wenn dieses Formular gesendet wird, Ich werde alles tun, was innerhalb dieser Zitate. Und gesagt, ich werde rufen grüßen () und dann wieder falsch. Na ja, mal sehen, was die Netto- Effekt ist erstklassig. Also lassen Sie mich gehen Sie vor und geben in, sagen wir, Loren, Senden. Hallo Loren. Mal sehen, ob vielleicht nur war dieser ein glücklicher Umsetzung. Nope. So ist es aus, was die Eingabe Namen habe ich eigentlich dort setzen. Beachten Sie aber, was nicht zu ändern. Die URL ist immer noch dom-0.html. Es gibt keine register.php. Es gibt keine zweite Datei. Es gibt kein action-Attribut. Was also ist das return false vermutlich tun? Warum rufe ich grüßen () und dann false zurück wahrscheinlich? Was geschieht in der Regel, wenn Sie auf Senden auf einem Formular, das auch wir haben in der vergangenen Woche gesehen? ZIELGRUPPE: [unverständlich]. DAVID MALAN: Es geht irgendwo, oder? Es geht bis zu einem gewissen Ziel-URL. Aber ich glaube nicht, dass das hier passieren. Ich möchte meine Web-Seite fertig sein dynamisch wie Google Mail, wo einst du bist da, Sie dort zu bleiben. Die URL nicht in einer Weise verändern, dass zeigt die ganze Seite neu geladen wird. Vielmehr ich etwas ändern will nur wie Ausdruck etwas hier auf dem Bildschirm. Nun lassen Sie mich diese reinigen bis ein wenig. Lassen Sie mich nicht öffnen dom-0, aber lassen Sie mich öffnen dom-2. Nur so können Sie einige Syntax hier gesehen habe. Es stellt sich heraus, dass das, was wir gerade haben wird mit rohen JavaScript. Also das ist wirklich die Sprache JavaScript. Einige von euch vielleicht wissen, von eine Bibliothek jQuery genannt. So jQuery ist nicht das Gleiche etwas wie JavaScript. Es ist nur eine Bibliothek, die eine wirklich intelligente Kerl schrieb und populär wie dass fast jeder in der Welt jetzt jQuery verwendet, wenn mit Hilfe von JavaScript. Und auf den ersten Blick, ehrlich gesagt, es sieht ein wenig kryptisch. Aber du wirst finden, vor allem, wenn Sie gehen dort für das endgültige Projekt mit Web- Entwicklung, werden Sie feststellen, dass diese reinigt die Dinge und spart Ihnen eine ganz Codezeilen. Also lasst uns einfach Blick auf, wie diese Form funktioniert. Beachten Sie, was habe ich anscheinend zu entfernen von meinem HTML? Es gibt keine auf einreichen Handler so zu sprechen. Es gibt kein Attribut. Weil Sie wissen, was Ich habe nicht wirklich? Ich fühlte mich wie wir fielen in alte Gewohnheiten gibt. So wie es begann zu fühlen, schlampig sowohl mit CSS vermischen HTML, weil Sie Art des Werfens verschiedenen Sprachen auf der ganzen Ort, ähnlich wie hat das angefangen zu fühlen wie eine schlechte Straße zu gehen, wo Ich setze JavaScript-Code innerhalb meiner HTML anstatt Factoring es aus. Also das ist die Lektion hier. In dom-2.html, ich bin Factoring es aus. Und ich werde die Dinge etwas zu tun anders. Denn jetzt werde ich meine Hände winken an, was das wirklich tut unter der Haube. Aber für jetzt davon ausgehen, dass die ersten Code-Zeile in dieser Bibliothek jQuery nur genannt, wenn die Dokument fertig ist, gehen Sie wie folgt. Da Web-Seiten nehmen können einige Zeit zum Laden. Sie könnten auf einem langsamen Internet sein Verbindung, und es könnte sein Spinnen und Spinnen, und schließlich ist es geladen. Das Code-Zeile sagt nur warten, bis die ganze Seite ist bereit, das Dokument ist bereit, vor der Ausführung dieses Codes. Und nun bemerken, ist dies wahrscheinlich das nützlichste ersten weg von jQuery. Diese Zeile hier ist sehr ähnlich im Geist auf diese Linie hier viel länger. Während in rohen JavaScript-Code, gibt existiert ein Dokument, die globale Objekt hat eine Funktion namens getElementById () die Leute, die geschrieben jQuery vereinfacht, daß nur sagen, Dollar-Zeichen, und dann innerhalb von Klammern gesetzt zwei Zitate, und dann legte eine Raute gefolgt von der einzigartige ID, die Sie packen möchten. So ist dies äquivalent document.getElementById. Inzwischen. Einreichen bedeutet nur, auf Einreichung von welcher Form auch immer du bist , die sich auf auf der linken Seite, gehen Sie vor und führen diese. Aber das ist jetzt die Neugier zu. Was ist komisch, was Ich habe hier hervorgehoben? Es ist nicht nur Art von syntaktisch neu, es gibt auch etwas fehlt. ZIELGRUPPE: Es ist gerade angerufen Funktion? Es ist nicht Alarm gerufen? DAVID MALAN: Ja. Nun, so alert () ist nach unten hier, um fair zu sein. Aber es gibt keine Erwähnung eines zu nennen, wie Sie wissen, foo oder etwas hier oben. Und in der Tat, ist eines der Merkmale dieser von JavaScript, die recht ist mächtig, aber auch ganz neu. Und PHP hat eigentlich das auch. Lassen Sie mich gehen Sie vor und tun etwas sehr kurz. Lassen Sie mich gehen Sie vor und setzen Sie diese hier. Lassen Sie mich dies zu tun. Funktion. Nennen wir diesen Handler (). Eine Handler-Funktion so zu sprechen. Etwas, das eine Operation behandelt. Lassen Sie mich meine bereinigen Einzug. Und setzen Sie diese hier. Und legte das hier. Yep. OK. So, jetzt habe ich eine Funktion namens Handler (), dass ich nicht wirklich weiß, was es noch tut. Es muss nur noch das Zeug. Whoops. Nahm zu viel. Lassen Sie uns dies tun. Gut. Entschuldigung. Gut. Lassen Sie mich dies zu tun. OK. Das sieht schön gerade übermitteln jetzt. Lassen Sie mich dies zu tun. Tun Sie dies. Und OK. So, jetzt lassen wir diese hier. Keine Programmierung an der Fliege. OK. So, jetzt gehen wir zurück zu wo die Geschichte begann. Zuvor sagte ich, dass diese Linie hier bedeutet, wenn das Dokument fertig, los vor und tun dies. Was will ich tun? Gut gesagt, ich will gehen vor und tun die folgenden. Führen Sie diese Code-Zeile, und dann was ich dir zu tun ist, nennen das funktionieren, wenn das Formular abgeschickt wird. Nun, das ist das, was ist interessant. Dies ist nicht selbst eine Funktion. Beachten Sie, ich bin nicht setzen Klammern hier in der üblichen Weise. Ich bin buchstäblich vorbei eine Funktion namens Handler (), um eine andere Funktion genannt submit () als Argument als aber es ist wie eine Variable. Und dies ist eines der Merkmale JavaScript ist Funktionen selbst sind wirklich nur Objekte. In der Tat, sie sind wirklich nur Variablen von einer Sorte. Und wenn der Name der Funktion ist Handler (), gibt es keinen Grund, warum ich nicht kann geben es als Argument hier. Und das bedeutet, wenn das Formular mit der ID der Demo ist vorgelegt, rufen Sie diese Funktion. Aber jetzt, wenn ich das alles rückgängig machen, warum dann habe ich vielleicht tun dies vor einem Augenblick? Nun, das ist eine anonyme Funktion. Denn ehrlich gesagt, erkannte ich, warum bin ich Mühe, Zeit zu verschwenden erklärte ein Funktion namens Handler () nur aufrufen es in einem und nur einem Ort? Wenn ich den Namen nicht, und ich weiß nicht müssen es nennen mehr als einem Ort, implementieren wir nur die Funktion genau dort, wo ich es brauche. Und so JavaScript und PHP unterstützen, was werden als anonyme Funktionen, die erlauben Sie mir, genau das zu tun. Aber wir sind nur die Spitze des Eisbergs. Beginnen wir mit nur ein paar necken letzte Beispiele. Wenn ich in quote.php gehen. Beachten Sie, dass dies eigentlich ein PHP Funktion, ein PHP-Programm, das ich geschrieben habe erwartet, dass ein HTTP-Parameter aufgerufen Symbol, und ich kann übergeben ein Wert wie FB. Und wenn wir tatsächlich an der Quelle zu sehen Code, das ist die Abfrage einer kostenlosen Website genannt Yahoo Finance, wie p-Set sieben, und es ist zu mir zurück etwas in der scheinbar -Format bekannt ist JSON - JavaScript Object Notation. Es ist nur ein Objekt. Beachten Sie die geschweiften Klammern, die Zitate, der Doppelpunkt und die Kommas. Jetzt mittlerweile, das ist ziemlich cool. Da kann ich wahrscheinlich einen Programmier Sprache, um URLs zu erzeugen , die aussehen wie diese dynamisch, oder? Ich kann dies bei Google ändern und wieder Google Aktienkurs von $ 1,017.55. Also mal sehen, ob wir nicht verwenden können, das jetzt. Lassen Sie mich mit ajax-0 hier gehen, die sieht wie folgt aus. Es ist nur eine Website, die hat eine Form mit einem Button. Lassen Sie mich hier voran gehen und in YHOO geben für Yahoo-Aktie Symbol, klicken Sie auf Get Zitat, und jetzt merke ich bekommen habe eine Warnung mit 32.86. Lassen Sie mich tatsächlich zu einem Züchter Version dieser Seite, Version zwei, geben wir sagen, Microsoft, MSFT. Jetzt anfragen. Und nun bemerken, die keine Benachrichtigung. Beachten Sie sagt, wo es Preis bestimmt werden? Es ist das einfachste von Beispielen, Hinweise zu welchem ​​GChat und Facebook Chat und Google Mail und andere solche Websites werden dabei durch tatsächlich Ändern der Web-Seite. Beachten Sie diese. Lassen Sie mich die Seite neu. Lassen Sie mich zu öffnen Chrome Inspector. Lassen Sie mich auf die Elemente gehen Registerkarte hier unten. Jetzt merken, wenn ich hier unten vergrößern und Öffnen Sie diese auf, bemerken, dass dies mein HTML-DOM - mein Dokument-Objektmodell. Das ist mein HTML. Aber jetzt bemerken, auch wenn es geht ein wenig schwer, es in beide sehen Orten gleichzeitig, wenn ich tippen FB hier oben, beobachten Sie die unten auf dem Bildschirm nur. Es ist wirklich zu ändern meine HTML-Datei auf der Fliege. Und es ist dabei ganz einfach durch so etwas tut. Wenn ich öffnen ajax-2, Bekanntmachung der Umsetzung etwas so sexy wie dass, obwohl es ziemlich hässlich, aber so anspruchsvoll wie die Funktionell hat es einige HTML unten. Aber merke ich verwendet, um zu taggen. Wir haben diese nicht verwendet, aber dieses ist wie a, aber es muss nicht zwingen alles auf einer neuen Zeile. Es macht einfach einen rechteckigen Bereich auf der gleichen Zeile im Wesentlichen. Beachten Sie, dass ich gab ihm die ID Preis. Und es zeigt sich durch Verwendung der gleichen JavaScript-Bibliothek, ich habe eine Funktion genannt quote (), dass heißt, wenn das Formular abgeschickt wird. Und was ich tue, ist diese. Ich Deklaration einer Variablen in JavaScript url genannt, spart den Wert quote.php? symbol =. Mit anderen Worten, ich selbst bin Anfang eine HTTP-Anforderung vorzubereiten, und dann Ich Verkettung auf, dass mit einem Plus welcher das Element mit der ID von Symbol ist, das ist bekannt, dass Textfeld rechts unten. So genau wie wir Formen in der Vergangenheit. Und dann stellt sich heraus, in jQuery, wenn Sie rufen. val (), die von einer val ruft Funktion, ein Wert, Funktion, das bekommt was der Benutzer eingetippt Und dann der gesamte Netzwerkverkehr das geschieht, ist dies. $. GetJSON. Und nebenbei, ist Dollar-Zeichen nur eine Kurznotation. Es ist wirklich jQuery.getJSON. Hol mir zu JSON von dieser URL, und als der Antrag zurückkommt, rufen Sie dieses Funktion und übergeben Sie als Argument was auch immer kam wieder vom Server. Also mit anderen Worten, wenn ich zurück in die Browser, und ich gehe zurück zu quote.php, was mein Browser tut, ist immer Dieses Datenpaket. Und wenn ich dann auf diese Seite hier, bemerken, wenn wir stattdessen an das Netzwerk gehen Registerkarte, und deaktivieren Sie es, und geben Sie in so etwas wie GOOG für Google und Holen Zitat, bemerken die Seite nicht ändern. Aber eine HTTP-Anfrage gemacht wurde, und was zurückgekommen, wenn wir uns die Antwort ist eine ganze Reihe von JSON dass wir mit zugegriffen schließlich Diese einfache Linie hier. Data ist was geworden war vom Server. Der Preis ist der Name des Schlüssel Ich kümmere mich um. So data.price gibt mir, dass. Jetzt mittlerweile, und das ist das letzte Beispiel. Sie können noch mehr mit der Seite zu tun. Eine eigentlich gut zwei. Wir können zurückbringen die markieren, wenn Sie daran erinnern. Das ist kein JavaScript. Wir können das tun. Sehr spannend. Wir werden das zu verlassen, wie einem Cliffhanger. Aber spannender, können Sie Dinge wie diese. Wenn ich nach Geolocation-1, stellt sich heraus, dass Chrome weiß, dass wir bei Breitengrad 42.37. -71,10. So gibt es noch mehr gibt zur Verfügung. Aber mehr dazu nächste Woche. Wir sehen uns am Montag.