>> [Musik zu spielen]
>> DAVID J. MALAN: Alles klar.
Dies ist CS50.
Dies ist der Beginn der achten Woche.
Und Sie erinnern sich vielleicht, dass wir aufgehört haben letzte Mal sah eine neue Sprache
ganz.
In der Tat, eine, die ziemlich ist leicht und es ist nicht einmal
eine Programmiersprache.
Es ist eine Auszeichnungssprache, die uns ermöglicht tatsächlich strukturieren und machen Webseiten.
Und wenn Sie etwas anderes in Verbindung mit this--
oder Sie bald will, wenn Sie nicht bereits haben.
Wir werden Cascading verwenden Style Sheets oder CSS, die
eine andere Art von Sprach mit Eigenschaften und Werte
das wird lassen Sie uns Dinge wie die Farbe ändern
und ändern Sie die Position und diese Art von zwickt.
Aber heute und weiter, beginnen wir, Fokus auf leistungsstärkere Sprachen
tatsächlichen Programmiersprachen wie PHP.
>> Also PHP gibt es schon seit einiger Zeit.
Und wie Sie, es zu sehen wurde in erster Linie entwickelt
früh zum eigentlichen Einsatz in Web-Entwicklung
und tatsächlich Erzeugung Webseiten.
Also, welche Art von Funktionen bietet eine Sprache
benötigen, um Web machen Seiten dynamisch mit ihm?
>> In anderen Worten, wenn Sie generieren möchten Inhalt dynamically-- wie Facebooks
Newsfeed, die sich ständig ändert, oder Sofortnachrichten, die von Zeit knallen
wie, was ist der Zeit-- Kernstück der Funktionalität
Sie in einer Programmiersprache müssen Das würde Ihnen dynamisch lassen
Drucken neue Informationen auf dem Bildschirm?
>> STUDENT: Code.
DAVID J. MALAN: Code.
Ok.
Wir werden das nehmen.
Ein wenig genauer.
Ich meine, wir tun könnten dies mit C, ehrlich gesagt.
Es wäre ein Schmerz im Nacken sein.
Aber-- ist dieses Engagement?
>> STUDENT: Ja.
Variablen, vielleicht?
DAVID J. MALAN: Variablen.
OK, sicher.
Variablen können sicherlich helfen uns aus.
Und sogar etwas einfacher.
Wir haben es in der ersten Programm des ersten Tages
wenn wir tatsächlich gesagt "Hallo Welt".
>> STUDENT: Drucken.
>> DAVID J. MALAN: Print, nicht wahr?
Drucken oder printf in der Welt der C. Also all dieser Zeit,
wir hatten unsere Entsorgung ein language-- C,
in particular-- und sogar Scratch für diese Angelegenheit,
können Textzeichenfolgen zu generieren.
>> Nun, wenn HTML, wie wir letzte Woche gesehen haben, ist nur eine ganze Reihe von Textzeichenfolgen
wenn auch mit offenen Klammern und geschlossen Klammern und eine Art von Reim
und Grund dahinter, gut, dann könnten wir wirklich
beginnen Erzeugen Webseiten entweder manuell, indem Sie sie in gedit
oder in Microsoft Word, denn das matter-- wir brauchen nur einen Texteditor.
>> Oder wir könnten Code zu schreiben, Ihren Vorschlag
früher, das würde uns lassen dynamisch zu generieren HTML,
und das ist, was wir zu tun beginnen mit PHP
und schließlich sogar mit einem Sprache namens JavaScript
ist zu verwenden eine andere Sprache zu erzeugen.
Und in der Tat ist es das, was Facebook und viele, viele andere Websites
tun, um tatsächlich dynamisch Display neuen Informationen zu Ihnen.
>> Lassen Sie uns also mit this-- a beginnen kryptischen suchen Linie, aber ein
das ist eigentlich ziemlich mächtig.
Bisher Wir haben mit C, Das ist eine kompilierte Sprache.
Und nur eine schnelle recap-- eine kompilierte Sprache hat, was charakteristisch?
Sie müssen natürlich zu kompilieren es, aber was bedeutet das?
Ja?
>> STUDENT: Es muss sein in Maschinencode zusammengesetzt.
>> DAVID J. MALAN: OK.
Es muss zusammengebaut werden in Maschinencode.
Also nehmen Sie Ihren Quellcode, Das ist eine Art Englisch-like.
Sie wandeln also etwas niedrigeren Niveau,
was letztlich genannt Objekt code-- 0 und 1en.
Und es ist diese 0 und 1 ist das eine CPU, wie sie von Intel,
tatsächlich zu verstehen.
>> Nun, PHP und Python und Ruby und JavaScript und Trauben von anderen
Sprachen werden nicht kompiliert Sprachen, sondern interpretierte Sprachen,
was bedeutet, Sie geben Sie sie einfach und dann Sie nicht erscheinen, sie in 0 und 1 ist.
Sie stattdessen nur liefern dann als Eingang zum Programm jemand anderes,
rief ein Dolmetscher.
Und diese Person ist Programm wurde entwickelt,
zu verstehen, was jede und jedes Symbol in Python oder PHP
oder Rubin oder eine beliebige Anzahl von andere Sprachen bedeutet.
>> Und so brauchen wir nur noch so etwas wie dieses.
Also in der Tat, ich bin zu gehen hinübergehen zu dem Gerät
hier, nur in einem alten Fenster, und wir sind
werde weiter und offener gehen eine Datei namens, sagen, hallo.
Jetzt zuvor, könnte ich gespeichert haben dies sogar mit der Dateierweiterung,
aber ich werde tun etwas noch einfacher hier.
Ich werde weitermachen und Diese Datei mit dieser kryptischen Syntax.
Also "user, bin, env, für Umwelt, php. "
>> Das ist einfach eine Zeile Code, die ist werde mein Betriebssystem zu erzählen,
gehen finden in Ihrem lokalen Umwelt, was auch immer das heißt,
wo PHP ist-- die interpreter-- und gehen Sie vor und verwenden Sie diese Interpreter
um den folgenden Code zu interpretieren.
Nun ist diese Art von eine hässliche Merkmal PHP.
Aber in dieser Sprache, jedes Mal, wenn Sie PHP-Code zu schreiben,
Sie brauchen, um eine dieser hässlichen haben PHP-Tags Abgrenzung der Anfang
Ihrer code-- <? php.
>> Aber hier unten, ich kann jetzt etwas tun ganz einfach, wie printf hallo Komma
Welt Backslash n der Nähe zitat, schließende Klammer.
Und dann nur für eine gute Maßnahme, ich werde
nach vorne und in der Nähe zu gehen meine php-Tag über hier
so dass alles aussieht schön schön gedruckt.
>> Und sobald ich auf Speichern, gedit ist eigentlich intelligent genug
bis zu dieser ersten Zeile schauen und zu realisieren, oh, du schreibst PHP-Code.
Lassen Sie mich Syntaxhervorhebung es mit den Farben
hier, so dass es aussieht ein wenig mehr.
Aber jetzt werde ich gehen bis zu meinem Terminal-Fenster.
Ich werde zoomen.
>> Dieses Programm wurde als "Hallo" so werde ich dot slash tun hallo,
aber die Erlaubnis verweigert.
Und bash.
Wir haben eigentlich davon gehört vor, was ein paar Wochen
im Rahmen der Shells, einer jener Fehler.
>> Aber Permission denied wir gesehen haben vor, vielleicht in einem anderen Kontext.
Hat jemand daran erinnern, wie Sie vielleicht etwas zu fixieren
wo Genehmigung ist so verweigert?
Was ist der Befehl, mindestens?
>> STUDENT: Chmod.
DAVID J. MALAN: Ja, chmod, zum Ändern des Modus einer Datei.
Und Sie bekommen umso mehr zu verwenden dies nächste Woche mit einer anschließenden Problem
gesetzt.
Aber jetzt werde ich ändern der Modus nicht lesbar sein,
sondern jedem executeability geben Privilegien, die Fähigkeit
diese Datei ausführen.
Und ich werde zuordnen dass in der Datei hallo.
>> Wenn ich jetzt tun dot slash hallo eingeben, können Sie sehen in der Tat, mein Programm, hallo Welt.
Und welche Schritt habe ich klar ganz überspringen?
Kompilieren.
Also habe ich nur dieses Programm lief ganz einfach.
>> Und es stellt sich heraus, können Sie dies mit zu tun eine Menge von Syntax erinnert an C
Lassen Sie mich gehen in den heutigen Code, denen ich in meine vhost Verzeichnis abgelegt
Hier zum wahren Gründe wir kommen wieder zu kommen.
Und ich werde in zu gehen, sagen wir, die Bedingungen 1.
>> Und Sie werden hier zu sehen, erste und Linie eine ganze Reihe von Kommentaren.
Aber dies ist tatsächlich eine Neuschöpfung in PHP
eines Programms die wir in der Woche tat sogenannte Bedingungen 1.c
wobei der Zweck in Leben dieses Programm
ist offenbar zu fragen der Benutzer für eine ganze Zahl
und dann einige flauschige Analyse darauf, wodurch
Sie sagen, wenn es positiv ist oder negativ oder gleich Null ist.
Und ich erwähne dies nur, weil, außer vielleicht ein kleines Detail,
Es ist zu unterscheiden, so weit von C.
>> Was ist die eine charakteristische hier springt, dass vielleicht aus
auf Sie als wenig anders?
Vielleicht zwei Dinge.
Ja?
>> STUDENT: Dollarzeichen n?
>> DAVID J. MALAN: Yeah.
So Dollarzeichen n vorhanden.
Und Dollar-Zeichen, wie wir werden sehen, gehen
, um ein Update zu der Anfang sein einer Variablen in PHP.
Es ist sowohl gut als auch bad-- gut dass es irgendwie auf der Hand, was ist
eine Variable, schlecht, dass es noch eine andere Sache zu geben.
Und es gibt einen weiteren was wir haben nicht ganz
gesehen, zumindest von dieser Eingabe. ja?
>> STUDENT: Readline.
>> DAVID J. MALAN: Readline.
Readline sahen wir nicht per se in C, obwohl es so etwas
ähnlich, aber wir getstring verwendet haben, und dies ist sein Gegenstück.
Also, wenn ich in diese zu gelangen Verzeichnis, das zufällig,
wie werde ich ein bisschen in meiner vhost erklären Verzeichnis und meine Quelle ein Verzeichnis,
und ich gehen Sie vor und tun dot slash conditions-- whoops-- dot slash
Bedingungen 1, werden Sie sehen, wieder, das gleiche Issue-- Erlaubnis verweigert.
>> Also lassen Sie mich vergrößern und tun chmod ein Plus x über die Bedingungen, Punkt Schrägstrich Bedingungen.
Ich möchte eine ganze Zahl, bitte, 50.
Und wir könnten spielen Spiel den ganzen Tag lang.
Es wird genau verhalten wie es in der ersten Woche taten.
>> OK, so gar nicht so verschieden, mit Ausnahme nicht nur, dass eine leichte bisschen Syntax,
aber an der Spitze, ich wieder hatte diese Linie, die
erlaubt mir etwas zu schaffen, dass sieht aus wie ein C-Programm namens hallo,
genannt Bedingungen 1.
Aber es ist nicht 0 und Einsen Ich bin direkt auszuführen.
Es ist stattdessen läuft diese Dolmetscher, dessen Name
zufällig identisch mit der Sprache.
Das Programm nennt sich PHP und meinen Code unterhalb der Linie eine wird hineingeben.
>> Wir können eine weitere recht einfach zu tun Beispiel erinnert an etwas,
wir haben schon vor Wochen.
Auch dies ist eine Art von beliebige Stück Code
dass anscheinend tut Was, wenn Sie es laufen?
Was ist das Drucklegung, vermutlich?
>> Also zunächst in Zeile 16, ist es sagen x ist jetzt 2, wahrscheinlich.
% D ist das gleiche wie für die $ i printf.
Also dann ist es Cubing, punkt, Punkt, Punkt, in Zeile 17.
Und dann Zeile 18 erscheint um eine Funktion Cubed nennen.
Und wo ist Cubed definiert?
>> Nun, es sieht aus wie in Zeile 25, das ist also gar nicht so verschieden.
Ich habe einige Kommentare über bekam , aber zum größten Teil,
es ist eine ziemlich einfache Portierung oder Wandlungs
vom C-Programm mit der PHP-Version.
Aber es gibt nun ein paar Unterschiede, die vielleicht sollte herausspringen.
Was ist anders an, wie Sie könnte diese gleiche Programm in C schreiben?
>> STUDENT: [unverständlich].
>> DAVID J. MALAN: Es gibt kein Prototyp bis oben.
So PHP-- und ehrlich gesagt, ein viele moderne languages--
gibt eine Menge intelligenter und hilfreich als C-Compiler, dass Sie
können die Funktion hier untergebracht, Sie können eine Funktion hier unten setzen,
und der Dolmetscher wird um Ihnen den Gefallen tun Lesung
die gesamte Datei, bevor sie entscheidet, dass einige Funktion nicht vorhanden.
So schön Verbesserungen Jahre später.
Aber es gibt auch etwas, sonst anders oder hier fehlt.
Ja?
>> STUDENT: [unverständlich].
DAVID J. MALAN: Wir haben nicht zu erklären die Arten von Variablen,
so werden wir schon bald sehen, dass es gibt verschiedene Arten in PHP,
aber Sie brauchen nicht zu ihnen angeben, die auch gute und schlechte.
Und es gibt noch eine andere Sache fehlt.
>> STUDENT: Es gibt keine Bibliotheken.
>> DAVID J. MALAN: Es gibt keine Bibliotheken.
OK, also das ist schön.
Wir bekommen eine Menge mehr aus der Box.
Also gibt es eigentlich viel mehr Dinge, als ich dachte, waren anders.
Wie wäre es mit Art und Weise zurück?
Was ist das?
Sagen Sie es noch einmal?
>> STUDENT: Pointer.
>> DAVID J. MALAN: Keine Zeiger.
OK, zumindest in diesem Beispiel nicht.
Das ist fair.
So gibt es keine Zeiger in PHP eigentlich im Allgemeinen.
Es gibt so etwas wie Referenzen, aber wir werden auch viel Zeit dort nicht verbringen.
Und was noch?
>> STUDENT: Main.
DAVID J. MALAN: Main.
Das war also das biggie Ich dachte an.
Hinweis Es ist kein Haupteinstiegspunkt.
Sie starten einfach das Schreiben Ihres Codes.
Und das ist eigentlich gehen vorteilhaft,
wenn wir den Übergang kurz, um tatsächlich mit
dieselbe Sprache für Web-basierte Programmierung, für die wir
wollen nicht nur eine Anlaufstelle haben.
Wir möchten vielleicht ein paar haben URLs, eine Reihe von verschiedenen Dateien
alle nehmen in Benutzereingaben und Erzeugen von Ausgangs.
>> Aber hier ist das sehr entmutigend Beispiel, dass ich versprochen letzte Mal,
nämlich in diesem Ordner hier, Rechtschreibfehler.
Also in dieser Datei Speller, die wir nicht zu viel Zeit auf, gibt es
Wesentlichen ein porting-- P-O-R-T. Es ist nur das Wort gegeben, wenn, sagen wir,
Konvertieren von einer Sprache zum anderen manuell Regel.
>> Dies ist eine Portierung von PC Version Speller von PSET 5.
Und ich im Wesentlichen versucht, konvertieren Zeile für Zeile so eng wie ich kann.
Also, wenn Sie diese Art der Sache mögen, es tatsächlich wert ist irgendwann
Ziehen sie beide neben Seite und sehen, was ist das gleiche
und was ist anders.
Aber sie sind verdammt ähnlich.
Wenn Sie sich erinnern, was Speller sah sogar wie,
auch wenn Sie nicht getan müssen diese Datei zu ändern,
es ist ziemlich ähnlich strukturell mit nur ein paar
Änderungen hier und da.
>> Das ist also nur zu sagen, dass es ziemlich einfach zu Speller konvertieren
von C nach PHP.
Aber im Wörterbuch gibt es etwas noch überzeugend.
Lassen Sie mich gehen Sie vor und erstellen Eigene dictionary.php Datei.
Dass so etwas anders wir werden es .c rufen .php statt.
Da es sich um eine PHP-Datei, ich do-- leicht annoyingly-- haben
, um die Datei mit zu beginnen ein PHP-Tag so.
Und ich werde weitermachen und definieren Sie ein paar Funktionen.
Funktion namens Check, der ist werde in einem Wort wie zuvor.
Aber dieses Argument gehen, um einen Dollar haben
unterzeichnen, weil wir wieder mit PHP.
Eine weitere Funktion von dictionary.c war Last
und es dauerte im Namen eines Wörterbuchs, also werde ich bekommen diese Funktion bereit zu gehen.
>> Ein anderer in dictionary.c war was?
Größe war einer der nettesten diejenigen, bei dest, wenn Sie einige Variablen in der Umgebung gehalten.
so Größe muss nur eine Variable zurück.
Und dann war da entladen.
>> So waren es diese vier Funktionen in Problem Set 5
dass Sie mit umzusetzen einige Datenstruktur oder Strukturen.
Dass in so versprach ich PHP, können wir erklären,
eine Hash-Tabelle, zum Beispiel, alle leichter das.
In der Tat, wenn ich eine Hash-Tabelle, Ich werde einfach so gehen
und da ist mein Hash-Tabelle.
Und das ist die Note, entmutigend, dass wir aufgehört haben zu letzten Mal.
Und wissen Sie was, wenn ich wollte eine Variable für Größe, gut,
dieses ist nicht alles daß sich von C,
aber ich werde weitermachen und tun.
Und bemerken keinen Datentyp.
Und ich werde später zurückgehen und einige Kommentare hier tatsächlich hinzuzufügen.
Aber was ist mit Last?
>> Wenn Dollarzeichen-Wörterbuch ist der Name meiner Datei
und ich eigentlich zu ladende Worte in dieser Tabelle nun,
Ich kann tatsächlich tun etwas ziemlich einfach.
One-- und dies ist minorly annoying-- in PHP,
Sie müssen innerhalb angeben einer Funktion, wenn Sie
zugreifen möchten einige globale Variable, die außerhalb definiert ist.
>> Aber das ist nicht besonders Interessant gerade jetzt.
Was ist interessanter ist dies für jeden konstruieren, dass ich erwähnte letzte Mal.
Und es stellt sich heraus, dass PHP hat eine Funktion abgerufenen Datei, deren Zweck im Leben
ist es, eine Datei zu öffnen und zu lesen in allen Zeilen in einem Array
und geben sie zurück zu.
>> Welches ist zu sagen, ich kann Wörterbuch tun dass jetzt effektiv, wenn ich rufe Datei
das wird mir zurückgeben ein Array von Wörtern aus der Datei.
Es ist nicht alles so gut.
Es geht immer noch um eine Linie sein von Worten, etwas linear.
Aber ich kann weitermachen und durchlaufen über jedes dieser Wörter verwenden
dass Syntax sahen wir kurz beim letzten Mal.
Und Sie werden es mehr zu sehen in der kommenden PSET.
>> Aber jetzt habe ich eine Schleife Iterieren über jedes Wort im Wörterbuch.
Und bei jeder Iteration, erinnere ich ruft das aktuelle Wort "Wort".
Und all das wird zu nehmen legte ein Wort in das Wörterbuch
sein wird Wort zu erraten "wahr."
Das ist mein Insert-Funktion.
Das ist mein Ladefunktion für mein Wörterbuch.
Jetzt ist es ein bisschen wie ein Cheat, weil, weißt du was, es gibt tatsächlich
Backslash n am Ende der Wörter daß ich wohl loswerden,
aber das ist kein Problem, da PHP eine Funktion namens Chop was wörtlich
hackt ein Zeichen am Ende.
Also kein Problem.
Wir haben Sie vor und tatsächlich gegangen dass gerade diese verkürzt.
Und jetzt sollte ich wohl im Auge behalten der Größe, also lassen Sie uns zumindest nichts this--
Größe ++.
Das kann ich nach wie vor tun.
Und dann wird dies wahrscheinlich zu gut funktionieren, so dass die return true.
Fertig.
PSET 5.
>> [Gelächter]
>> DAVID J. MALAN: OK.
Wir werden das wieder tun mit dem nächsten PSET, zu.
Also, was über Größe?
Na, hoffentlich ist dies eine zu wie Sie das letzte Mal erwarten würde,
obwohl ich zu tun habe diese dumme globale Sache.
Es ist nur ein Artefakt aus Design der Sprache.
>> Aber Kontrolle ist ein wenig interessanter.
Also, wenn ich in Dollar übergeben unterzeichnen Wort, habe ich zuerst
soll, um Zugang zu haben dass die globale Variablentabelle.
Und jetzt, wenn ich will überprüfen, ob ein Wort ist es,
Ich kann nur sagen, wenn es wahr ist, dass Hier finden Sie in der Tabelle gesetzt,
dann gehen Sie vor und zurück true; anderes, return false.
Fertig.
Die andere Hälfte der PSET 5.
>> Also gut, ich bin also wieder Schneiden Sie ein paar Ecken.
Der Fairness halber sollte ich wahrscheinlich verbringen ein paar Sekunden
auf dieser Umsetzung.
Und ich sollte wohl nicht verspotten alle Stunden, die Sie auf der PSET haben so viel.
So strtolower eine Funktion ist.
Etwas Ähnliches existentialistischen in C, zumindest für Zeichen,
aber PHP habe eine ganze String-Version.
>> Das wird alles erzwingen in Kleinbuchstaben, die einige von euch
getan haben könnte, um zu kanonisieren, was Sie in Ihrem Wörterbuch Putting wurden.
Und jetzt können Sie diese in C auch tun.
Das hat nichts mit PHP zu tun.
>> Aber Sie haben jederzeit eine Boolesche Bedingung,
wie etwas auf der Leitung 10 gibt, die nur
werde auf true zu bewerten oder falsch, und Ihr, wenn sonst deutlich
zurückkehrt wahr oder falsch, ich konnte Diese sexier einfach wirklich machen
und nur so etwas wie dies zu tun.
Also, dass es meine Check-Funktion.
Richtig, wenn der Boolean kehrt ein wahrer oder ein falscher,
lasst uns einfach zurück es sofort.
>> Und es gibt noch ein paar andere Tweaks Ich hier und da machen könnte.
Load-- Entladen, übrigens, das erledigt.
Dort nichts zu tun.
Da alle in dem Speicher PHP und viele andere Sprachen
ist eigentlich für Sie verwaltet.
Während also in C, wie Sie schmerzlich gelernt haben,
alles, was Sie malloc oder calloc oder realloc, müssen Sie sich selbst zu befreien.
Alles, was Sie fopen, um fclose haben Sie, so dass die Ressourcen letztlich befreit
und Tools wie Valgrind nicht bemerken und sich nicht beschweren,
das ist eine gute Sache, um auf ihnen laufen.
>> Aber sicher, da muss sein etwas zu fangen, oder?
Andernfalls wir irgendwie verschwendet eine ganze Reihe von Wochen.
So gibt es eine Reihe von Gründen Deshalb haben wir eine Art nehmen diese Flugbahn,
aber es gibt einen Kompromiß.
Richtig, dies war thematisch.
>> Also, was könnte ein Trade-off hier bewegt, von C nach PHP?
Fühlt sich an wie alle gewinnen bisher außer ein bisschen Hässlichkeit hier oder dort.
Ja.
Was ist das?
>> STUDENT: [unverständlich] Speicher.
DAVID J. MALAN: Geschwindigkeit.
Ok.
Nun, meine Geschwindigkeit war ziemlich schnell.
Richtig?
Aber Geschwindigkeit der Ausführung des Programms?
OK, das ist also ein fairer Punkt.
>> So, wie es wäre, ich im Voraus geschehen cued bis meine beiden try Lösung, die eine
Ich auf dem großen Brett hatte war einen Versuch-basierte Lösung,
und ich habe, dass in diesem Verzeichnis hier.
Also ich in einem Moment, kann ich weitermachen und laufen diese auf der King-James-Bibel,
Enter drücken.
Und dies hoffentlich korrekt ist Umsetzung am Ende,
gibt mir Zeit insgesamt von 0,38 Sekunden, dass
ein etwas willkürliches Beispiel.
>> Und wenn ich jetzt in diese zu gelangen zweiten Terminalfenster
hier, wo ich zum ersten Mal geöffnet gedit, lassen mich in der heutigen code-- gehen, die wieder
ist in diesem Verzeichnis hier-- und lassen Sie mich gehen Sie vor und führen Speller.
Also nur klar zu sein, dies ist die PHP-Version.
Ich frage mich nur, das die Spitze der es hierher.
>> Also, wenn ich Speller von Tilde CS50 tun PSET 5 Texte, King James, geben.
Es ist immer noch schneller als Schreib in C, aber die Gesamtzeit,
ist, bemerken, 0,93, während meine C-basierte Implementierung betrug 0,38.
Also ist es eine nicht-triviale Unterschied.
>> Und dies ist nur auf einer Datei.
Wenn Sie die beiden laufen waren Programme gegen die große Tafel
und haben eine ganze Reihe von Ein- getestet, wäre dies sicherlich summieren.
Und wenn wir auch größere Datenmengen, Auch dies würde summieren sich umso mehr.
Also ja, zahlt rund Preis Geschwindigkeit ist in der Tat der Fall.
Was sonst?
Ja?
>> STUDENT: RAM-Nutzung.
>> DAVID J. MALAN: RAM-Nutzung.
Also habe ich keine Sekunde geben dachte beim Schreiben dieses PHP
Ausführung, wie viel Speicher war ich mit.
Ich bin völlig Aufschub, dass PHP selbst und wer schrieb das Programm.
Und das könnte in Ordnung sein, aber wenn ich eigentlich wirklich
kümmern drückte so viel Leistung aus meinem Programm oder von meiner Website
oder aus welchem ​​Werkzeug Ich baue, vielleicht
PHP ist in der Tat nicht die richtige Sprache.
>> Und in der Tat ist der Grund, warum für So viele Web servers--
die eigentlichen Programme, servieren Web content--
werden nicht in PHP geschrieben oder in Python oder Ruby.
Sie werden geschrieben, wie Sie jetzt mit PSet 6 zu tun,
in C, so dass Sie quetschen kann jedes bisschen Leistung aus ihm
und wirklich ausüben feinkörnige Kontrolle darüber, was ist
los unter der Kapuze und nehmen Sie es nicht nur
für einige höhere gewährt Level-Datenstruktur.
>> Betrachten Sie, nachdem alle, Wer in PHP implementiert
diese Vorstellung einer Hash table-- es ist eigentlich mehr
richtig genannt eine assoziative array-- tut er oder sie eine Idee haben, welche Art
von Eingängen willst du werden werden Putting in die Struktur?
So offensichtlich nicht, oder?
Es ist ein generisches Werkzeug im Toolkit, das ist
für jeden, der will, zur Verfügung gestellt , es zu benutzen, und so ist es sicherlich
letztlich nicht optimiert werden für genau das, was Sie tun möchten.
>> So handels offs-- Entwicklungszeit vielleicht unterscheiden, Leistung kann abweichen,
Komplexität oder Speichernutzung abweichen.
Und so, was Sie finden verstärkt ist, dass es
anders sein Tools für den Handel.
Und in der Tat für einen Super Mehrheit Abschlussarbeiten der Menschen in dieser Klasse,
es glauben oder nicht, ist C nicht um die richtige Sprache zu bedienen sein.
>> Und in der Tat, einer der Imbissbuden letztlich für jede Klasse wie folgt
ist es, Sie denken, Nun, was sollte man abziehen
das Regal, wenn Sie wollen, um ein Problem zu lösen.
Und in der Tat, werden wir diese Brücke überqueren noch mehr als wir uns mehr Sprachen
auch über heute.
>> Also lassen Sie uns jetzt, um den Übergang vielleicht ein vertrauter Rahmen
für die Verwendung einer Sprache wie PHP.
Es ist etwas gemeinsam zu nutzen die Kommandozeile, das Schreiben von Skripts
wie ich es tat, aber es ist viel, viel häufiger.
Und beabsichtigt wurde, verwendet werden in die Form von Dateien, die in der Regel am Ende
in .php-- aber das ist kein prerequisite--
dass selbst erzeugen Web-Inhalten.
>> Also lassen Sie mich gehen Sie vor und einige öffnen Beispiele, die ich im Voraus vorbereitet.
Und das sind eigentlich eine Art wahr Geschichten, dass eines der ersten Dinge,
Ich je getan habe mich nach Beendigung CS50 und vielleicht, denke ich,
Vor CS51 Jahren ist mein Mitbewohner und ich halfen
um den Neuling intramuralen laufen Sportprogramm, welches zu der Zeit,
hatte Freshman Registrierung für verschiedene Sport durch Ausfüllen ein Stück Papier,
wie es genannt wurde, zu Fuß über den Hof zu Wigglesworth,
und Ablegen in einigen Proctor Tür Tropfen.
Und dann würde er oder sie durchlaufen und sie dann tatsächlich mailen Sie uns manuell
dass wir für einige Sport registriert.
>> So klar, eine Chance für Verbesserungen.
In diesen Tagen, könnte man nur drehen Google Forms, aber wieder in den Tag,
wir mussten tatsächlich for-- dies zu erreichen war nicht einmal so lange ago-- erreichen
für ein Programmier Sprache, die nicht PHP.
Zu der Zeit war es etwas namens Perl,
die seit aus der Mode gegangen ist.
Aber die Idee, die gleiche ist.
>> Und ich Wesentlichen setzte sich, um zu versuchen zum Hafen geht Perl-Versionen von PHP,
aber in vollständigen Haftungsausschluss, nicht geben Jeder Gedanke an die Ästhetik nur noch.
So, hier ist eine Web-Seite.
Dies ist eine Datei.
Wenn ich Bilder in seine scheinbar genannt froshim0.php
nur weil es unser erstes Beispiel in dieser Reihe.
Und feststellen, dass es, was scheint eine sehr hässliche HTML Form vorliegen,
sondern eine Form ist interessant weil es
me auf eine Benutzereingabe an den Browser zur Verfügung stellen.
>> Jetzt letzte Mal als wir eine Form, um wem haben wir unterbreiten unseren Abfrageparameter,
die Warteschlange Parameter wie es genannt wurde?
Also bei Google, oder?
Wir auf der Idee total punted nichts mit diesem Eingang tut.
>> Aber heute, wir produzieren Ausgabe.
Und das Verhalten werde ich sehen hier zunächst ist ziemlich trivial.
David, ich werde abhaken Geschlechter hier sagen Matthews hier.
Ich werde nicht Kapitän sein.
Ich werde auf Registrieren.
Und feststellen, dass die URL hat geändert, um register 0.php,
und dann gibt es dieses hässliche Text hier.
Ich dachte nicht die Formatierung von diesem.
>> Aber was interessant ist, ist, dass drei Werte wurden offenbar eingeleitet.
Dies ist der PHP-Art entspricht printf--
wir werden sehen, was es wirklich genannt in einem bit-- die gerade druckt
was man hineingeben.
Also das lässt vermuten, dass diese Form hatten mindestens drei Felder, um sie,
und Sie sah mich geben Sie sie in.
Einer war mein Name, war Geschlecht, war Schlafsaal.
Und Kapitän nicht einmal zu geschickt bekommen der Server, weil ich nicht überprüfen.
>> Das ist also scheinbar sagen, wenn Sie Dinge einreichen, die im Internet,
Nicht nur, dass die URL manchmal change-- manchmal nicht.
Tatsächlich verändert der Dateiname, aber was fehlt im URL
dass wir sahen letztes Mal mit Google.
Ja?
>> STUDENT: Keine Abfrage-String
>> DAVID J. MALAN: Es gibt keine Query-String.
Es gibt kein Fragezeichen etwas.
Es gibt kein Fragezeichen q gleich Katzen, wie wir beim letzten Mal.
Und es gibt sicherlich keine Fragezeichen-Namen entspricht
David oder einem Wohnheim gleich Matthews, also wo ist, dass alle hin?
>> Nun, lassen Sie mich zurück zu gedit gehen Sie hier und eröffnen die erste dieser Dateien
in meiner vhost, lokalen Host, öffentliche Verzeichnis hier und gehen in froshim0.
So stellt sich heraus, dass fast Alle auf dieser Seite ist nur HTML.
Und dies könnte Ihnen nicht vertraut sein, aber es wird bald mehr mit PSET 6 sein
und PSET 7 und PSET 8.
Doch dies ist nur eine HTML-Seite.
>> Und die interessante Sachen scheint hier zu sein.
Ein Formular-Tag, dessen Attribut action hat einen Wert von Register 0.
Das ist, warum, wenn ich einreichen Dabei geht es zu dieser Datei.
Aber Methode unterscheidet today-- Pfosten.
So stellt sich heraus gibt es zumindest zwei Methoden, die im Internet verwendet
Informationen zu senden von Browser zu Server.
Get legt es in der URL.
Beitrag legt es an anderer Stelle.
Und wann und warum könnten Sie eigentlich wollen eine Website
zur post dann verwenden Sie stattdessen bekommen, nur intuitiv?
Jede Website.
Welche Daten sollten nur weitergegeben werden durch Folgerung jetzt per Post, im Gegensatz
zu bekommen, wenn wir gesehen haben, die beiden Unterschiede?
STUDENT: [unverständlich] zu sichern.
DAVID J. MALAN: Wenn Sie möchten etwas sicher.
Sie könnten also ein Kennwort eingeben in eine Website, eine Kreditkarte
in eine Website würde Art dieser suboptimalen
wenn der Browser setzen, dass Wert innerhalb der URL.
Warum?
Du siehst es, welche nicht scheint so eine große Sache sein,
aber Chancen sind Sie ziemlich häufig zu Fuß weg von Ihrem Computer oder Verwendung Computer
Labors, und so jemand anderes oder sogar ein Mitbewohner
könnte leicht zu Fuß und sehen, dass private Informationen.
Wenn Sie eine E-Mail senden über das Web, werden Sie wahrscheinlich
wollen nicht, dass die Daten Ende in der URL als auch.
Und so gibt es eine Reihe von Gründen Deshalb wollen wir vielleicht, um es hier zu setzen.
Und photos-- Recht, ich kann nicht einmal ganz vorstellen, wie Sie eine Grafik zu nehmen,
wie ein JPEG, und steckte es in einer URL.
Sie könnten es tun.
Es gibt Wege, es kodiert, aber es ist nur nicht so einfach.
>> So registrieren 0 ist eigentlich sehr berauschend.
Alle heißt es wörtlich ist dies.
Es druckt innerhalb von einigen HTML-Tags die folgenden.
Ich habe eine PHP-Tag hier haben innerhalb eines vorge Tag verschachtelt.
"Pre" bedeutet nur, pre-formatierten Text, Mono-Abstand, wie eine Schreibmaschine.
>> Printr ist ein Druck rekursive Funktion.
Und dann gibt es diese interessante Sache hier.
Und wir werden darauf zurückkommen denn es gibt andere,
aber Dollarzeichen Unterstrich Post zu sein scheint
eine Variable in PHP, in der alles Sie von Browser zu Server senden
wird für Sie gespeichert.
Und wir werden sehen, wie man an bekommen dass Informationen, bevor lang.
>> Aber zuerst gehen wir zurück zu ein etwas anderes Beispiel.
Going in register-- oder vielmehr froshims1.php,
was sieht ein wenig anders aus.
Ich nahm ein wenig mehr Mühe mit der Formatierung,
obwohl es immer noch ziemlich hässlich.
Aber ich werde weitermachen und geben Sie "David" jetzt.
Männlich.
Wir werden "Kapitän" dieses Mal zu überprüfen.
Wir Matthews zu tun.
Und registrieren.
>> Und diesmal heißt es, hm, nicht wirklich.
Alles klar, so was ist Register 1?
Lassen Sie mich in offene Register 1 und-- hm gehen.
Na gut, das ist so interessant, und dies
ist ein Sprungbrett nun Richtung Weitere interessante Programme.
>> Beachten Sie den Anfang dieser Datei hat ein PHP-Tag sowie einige Kommentare.
Und diese sind, denn jetzt, eine Ablenkung so lasst uns einfach loszuwerden, die Kommentare
gerade wie sie in C. bist Und ich behaupte, mit diesem Stück Code mit einem Kommentar
dass dieser Code Validierung der Unterwerfung.
>> Nun stellt sich heraus, dass Variablen wie Dollarzeichen
streichen Post sind genannten Super Globals.
Sie sind wie diese Sonder globale Variablen
die gerade omni-gegenwärtig sind verfügbar in Ihrem Programm.
Und Sie können eckige Klammer-Notation zum Index in sie nicht mit Zahlen
wie 0, 1, 2, 3, aber die tatsächlichen Worte.
>> So können Sie von Dollarzeichen denken können streichen Posten als Art einer Hash-Tabelle
dass man einen Schlüssel in ein Lookup geben Wort in-zwischen den eckigen Klammern,
und es geht um Sie wieder das geben Wert, der der Benutzer tatsächlich zur Verfügung gestellt.
PHP hat eine Funktion genannt leer, dass nur
sagt ja oder nein, diese Variable leer ist oder nicht.
Wir haben diese Doppelstriche, das bedeutet nur, oder, wie in C.
>> Also in der Tat ist diese Linie 4 nur sagen, wenn der Benutzer nicht einen Namen geben
oder hat ein Geschlecht nicht geben oder nicht geben ein Wohnheim, gehen Sie vor und leiten ihn
oder ihr über diese Leitung hier.
Also das ist ein wenig kryptisch, aber das bedeutet nur, wörtlich
gehen Sie zurück zu diesem Ort, so ist es dem Benutzer punts
zurück, wo er oder sie herkommt.
Aber es ist ein wenig unelegant in, dass ich hart codiert es.
>> Aber was, wenn diese, wenn die Bedingung nicht auf true zu bewerten?
Was ist, wenn der Benutzer hat mir seine oder ihren Namen und Wohnheim und Geschlecht?
Dass, wenn Bedingung nicht werde auf true zu bewerten,
so dass ich nicht getroffen die Ausfahrt in Zeile 7.
Also, was passiert?
Und das ist, was ist Interessantes über PHP.
>> Sie können in und aus Drop PHP-Modus, so zu sprechen.
Wenn Sie einige Code, der ausgeführt werden soll, Sie öffnen und schließen ein PHP-Tag kann
und legte Code da wie ich hier getan.
Sobald Sie schließen die PHP-Tag, der Server
ist gerade dabei, ausspucken was auch immer Sie setzen dort.
Und in der Tat, das war Teil des Der ursprüngliche Entwurf von PHP,
für besser für schlimmer war dieser Vermischung von Code und Markup
Sprache.
Und wir werden, dass dieser sehr zu sehen schnell zufällt in ein Chaos.
Und so werden wir besser als zu tun dies letztlich aber nur
beachten Sie die Leichtigkeit, mit der ich bin tatsächlich in der Lage, eine gewisse Logik auszuführen.
>> Aber immer noch ein bisschen berauschend.
Wir öffnen bis Version zwei Frosh IMs, die
scheinbar unterwirft sich register2.php.
Also diese Datei ist eigentlich los fast gleich aussehen.
Ich werde zu Frosh IMs 2 gehen.
Aber in Frosh IMs 2, mal sehen, was passiert.
>> David, klicken Sie auf das Optionsfeld, wie es heißt; Matthews, kein Kapitän.
Registrieren.
Sie sind angemeldet.
Nicht wirklich.
Oh, Moment mal, wir hatten einfach dass beispielsweise, nicht wahr?
Alles klar, stand by.
Wir werden die drei zu tun.
Eindeutig etwas geht um mit Gmail passieren.
Wir werden es schaffen.
>> So Frosh IMs 3 sieht wie folgt aus.
Nicht anders.
Aber wenn ich David, männlich, Matthews, und registrieren, diese dritte und letzte Version
Ansprüche, ganz einfach, Sie wirklich registriert.
Das ist eine Art unwesentlich.
Aber ich behaupte, mit diesem dritte und letzte Version
Ich habe jetzt neu erstellt, was genau mein Mitbewohner und ich für die Frosh IMs gebaut
Programm Jahren.
Und es war einfach.
Es gab keine Datenbank, keine Excel-Tabelle.
Aber noch wichtiger ist, es gab kein Papier mehr
weil das, was wir mit diesem Programm haben war, um tatsächlich eine E-Mail die Proctor, der
Zuvor war Empfangen diese Dinge über Formulare.
>> Und anscheinend haben wir dies in programmiert haben derart, dass, wenn jemand registriert,
John Harvard Konto E-Mails die proctor-- oder sich selbst in diesem Fall,
John Harvard-- mit den folgenden text-- "Diese Person nur registriert."
Name ist David, ist Kapitän lassen; Geschlecht, männlich; und Wohnheim, Matthews.
>> Also, was ist da passiert?
Nun, die betreffende Datei hier ist offenbar register3.php.
Und wenn ich diese öffnen, werden Sie sehen, sowohl die Macht der Code wie folgt
und auch, ehrlich gesagt, die Unsicherheit eines Systems wie E-Mail.
Ich habe gerade effektiv tat sein John Harvard in der folgenden Weise.
>> Ich habe den offenen php tag bis oben, die sagt nur hier kommt einige PHP-Code.
Hier unten, stellt sich heraus, es sind Bibliotheken in PHP.
Sie wissen einfach nicht brauchen, um gehören Header-Dateien so viel.
Sie erhalten mehr mit dem Küchenspüle, so zu sprechen.
>> Aber dieses Mal in Zeile 4, das tue ich wollen Spezialbibliothek aufgerufen
PHP-Mailer, die etwas, das Sie ist kann kostenlos in vielen Systemen installieren.
Hier unten bin ich Validierung die Vorlage nur
durch Überprüfung hat der Benutzer geben mir ein Name, ein Geschlecht und ein Wohnheim.
Und wenn ja, gehen Sie vor und instanziiert einen Mailer.
>> Sie können sich das als eine denken Codezeile, die nur reserviert.
Es ist wie malloc, aber es ist ein wenig sexier
in, dass Sie gerade erwähnen nicht malloc und einige generische Nummer.
Sie sagen, gib mir einer von ihnen, gib mir einen neuen von diesen.
>> Und wenn Sie in programmiert haben Java oder C ++ oder anderen Sprachen,
Sie könnte dies gesehen haben.
Aber die Rede kurzer Sinn, wenn vertraut, diese Linie
legt in Dollarzeichen mail eine spezielle Struktur namens
ein Objekt, das eingebaute hat E-Mail-Funktionalität.
Und in der Tat, bemerken und ähnliche Syntax.
>> Dies ist kein Zeiger, per se.
PHP verwendet nur die gleiche Syntax.
Diese Zeile sagt Nutzung SMTP-- Simple Mail Transfer
Protokoll, das nur der ist Protokoll verwendet, um Mail zu senden.
Dies ist die Angabe Einsatz Harvard SMTP-Server, der
ist irgendwo hier auf dem Campus.
>> Dies wird sagen, was TCP Portnummer zu unterhalten,
und ich gerade durch das heraus Googeln oder bitten den Helpdesk.
Und dann, weil Harvard verwendet einige Systemsicherheit auf dem Mail server--
mindestens zu verschlüsseln Verkehr zwischen euch und ihr
obwohl jedermann zu senden können, um es-- Ich werde auf dem TLS-Protokoll drehen
für die Führung dieses sicher.
>> Aber das ist, wo die Dinge ein wenig beängstigend.
Ich kann einfach beliebig sagen, dass ich jharvard,
Und ich kann einfach beliebig hier mailen mir.
Und dann kann ich eine geben Thema mit dieser Linie hier.
>> Und das sieht einfach hässlich, aber es ist nur ein Haufen von Verkettung.
Stellt sich heraus, PHP hat eine super Nutzsymbol, wie einige Sprachen, die Punkt-Operator,
die gerade buchstäblich verkettet String nach String nach String,
und Sie müssen nicht zu malloc oder Figur haben aus der Gesamtlänge des Strings.
Sie tun es einfach.
Und in der Tat, weil ich Verkettung in all diesen Dingen mit diesen Punkten,
das ist, warum die E-Mail I geschickt sah aus, als es getan hat.
>> Und dann schließlich hier, ich bin Versenden.
Also, wenn dies falsch ist, Ich werde einfach zu sterben,
die eine Funktion ist, dass nur Drucke auf den Bildschirm einige Fehlermeldung.
Aber es ist in der Tat, Aufruf der Sendefunktion.
Andernfalls, wenn all dies fehlschlägt, es leitet mich wieder hier.
>> Und warum sehe ich, dass Ich bin wirklich registriert?
Nun geschah es, genau hier.
Also ich diese bringen für ein paar Gründe.
>> Eines, das ist genau, wie wenn Sie bauen einige Website für ein Abschlussprojekt
oder für die reale Welt, ist dies wie Sie E-Mail-Erinnerungen senden
an Ihre Kunden oder Ihre Abonnenten.
Dies ist, wie Sie das Kennwort Mahnungen schicken.
Dies ist, wie man die Leute Nachrichten senden dass sie eine neue Facebook haben
Nachricht anhängig oder so ähnlich.
>> Aber es spricht auch für die Tatsache, dass dies
haben sehr gut aus gewesen Davin oder sonst jemand.
Und ich sage, diese Art von mit einem Lächeln, denn ich bin
ganz sicher, was durchmacht mehrere Ihrer Gedanken an dieser Stelle.
Aber das ist einer von denen zu tun, wie ich sage, nicht was ich tun Art von Dingen,
weil es trivial ist schmieden E-Mails wie diese.
Aber wie Sie vielleicht gesehen haben oder in Crimson zu lesen,
spät es ist auch ziemlich trivial für Menschen
um sie wieder zu einem gewissen Herkunft zurückverfolgen.
Und fragen Sie mich einige Zeit, vielleicht am CS50 Mittagessen, wie ich zum ersten Mal
habe sehr genau kennen fast bis zu den ed Bord vielen Jahren
her, als ich entdeckte, wie das Internet funktioniert.
So in einem case-- leicht nachdem die ed Bord taten.
>> So in jedem Fall gibt es eine ganze Reihe von Super Globals,
wie sie hier genannt wird, von denen eine wir saw-- Dollarzeichen Strich Pfosten.
Es gibt ein Gegenstück namens get, was, wo Sachen von einer URL ist
landet gehen.
Und es gibt eine ganze Reihe von anderen, too-- Sitzung und Server und Cookie.
Wir kommen wieder zu kommen cookie andermal,
aber Sitzung ist irgendwie cool denn direkt now-- bis now--
alles, was wir mit einem Web-Browser ist eine Art von Staatenlosen, sozusagen.
Ich kann rund klicken, Zugang Dateien auf dem Server, was
passiert auf dem Bildschirm, aber dann wird die Verbindung geschlossen wird.
Der Internet Explorer oder die Firefox-Symbol hält Spinn
und Sie sehen, was dass Web-Seite enthält.
>> So HTTP staatenlos, dass sobald es einen Zusammenhang,
bekommt einige Daten, das ist es.
Keine Verbindung mehr, im Gegensatz zu Skype, Im Gegensatz zu Facetime, im Gegensatz GChat, die
eine konstante Verbindung zum Server.
Das Web ist grundsätzlich getrennt, obwohl wir
sehen, bevor lange wie wir können die Dinge zu simulieren
wie Facebook-Chat und GChat, dem die illusion-- pflegen
oder tatsächlich tun pflegen ein ständige Verbindung mit
mehr moderne Technik.
>> Aber wenn ich gehen, um, sagen wir, counter.php, Dies ist ein weiteres einfaches Beispiel
wie wir sehen werden, dass derzeit denkt Ich besuchte die Website Nullzeit.
Aber wenn ich neu zu laden einfach die Seite, sie weiß, irgendwie war ich hier vor.
Wenn ich reload wieder, es weiß, dass ich hier war, bevor.
Und wieder und wieder und wieder und wieder.
>> Es gibt also einige Plus plussing los ist, aber Bekanntmachung
das kleine Ding dreht immer so kurzzeitig bis oben und dann trennt,
so ist es nicht so, dass ich eine konstante Verbindung zu meinem Gerät.
Nun, wenn ich in counter.php gehen, feststellen, wie einfach es ist.
Ich zum ersten Mal diese besondere nennen Funktion, dass wir bald
Beginn der Einnahme für selbstverständlich genannte Session-Start.
Starten Sie eine Sitzung.
>> Und eine Sitzung fortan nur werde ein Eimer sein, wie ein Einkaufs
Warenkorb, in dem Sie Werte setzen und Art von Vertrauen als Programmierer
dass sie gehen, um hier zu sein, wenn dass Benutzer kommt back-- eine zweite
später eine Stunde später, auch ein Jahr später, solange er oder sie nicht klar tut
ihre Cookies, wie wir schließlich sehen.
Und jetzt habe ich nur noch ein, wenn die Bedingung hier.
Also, wenn die folgenden Schlüssel, genannt Zähler, ist im Inneren eingestellt
dieses Super global-- diesen Hash Tisch, wenn Sie genannte Session will--,
dann gehen Sie vor und sichern Sie sich die Wert aus dem session-- Think
Dies als Einkaufs cart-- und speichern Sie es
in einer temporären Variablen namens Zähler.
>> Andernfalls, wenn die Wertzähler war nicht in der so genannten Warenkorb gesetzt,
nur initialisieren auf 0.
Schließlich hier unten gehen und wieder in die Einkaufswagen oder der Session
der Wert des Zählers +1.
So stellt sich heraus, dass diese Spezialcontainer hier--
was wiederum ist eine dieser zugeordnete Arrays, ein Array, das Sie können Index
in Worte statt numbers-- bleibt auch nach der Benutzer weggeht.
Wieder werde ich zurück auf die Seite jetzt gehen.
Es ist schon eine Minute oder so.
Aber es erinnert sich, dass ich 19 Male zuvor hier gewesen.
Dies ist mein 20. Besuch.
>> Und so, das wird Schlüssel zum zu sein Implementierung einer Website, erinnert sich
dass Sie angemeldet sind, dass Sie setzen etwas wörtlicher in Ihrem Warenkorb
zu kaufen, oder dass Sie einige haben Anzahl der Nachrichten anhängig.
Immer, wenn Sie zu wollen erinnern Informationen
wir werden diesen PHP sehen wie mehrere andere Sprachen,
bietet uns dieser Illusion der staatlichen obwohl, wie Sie im PSET 6 zu sehen,
wie Sie HTTP-Anfragen sind vom Client zum Server, das ist es.
Sobald Sie wieder zu bekommen, dass Antwort, es gibt nichts mehr
vom Server zurückkommen standardmäßig.
Aber wir werden sehen, wie man das umgehen.
>> Nun, wollen wir versuchen, Reinigen Sie diese ein wenig.
Wir haben ein paar mal gesehen verschiedene Beispiele gibt.
Ach ja, und nebenbei, für diejenigen, bekannt oder unbekannt,
Der Grund, dass die Frosh IMs Beispiel ging
aus der Betrachtung wirklich hässlich, gut slightly--,
noch ugly-- bis leicht weniger hässlich, obwohl immer noch hässlich
Denn wenn wir uns auf den Quellcode hier
es stellt sich heraus, dass ich diese ganz am Anfang der Datei.
>> Es stellte sich heraus, dass Bootstrap ist eine von vielen frei verfügbar Bibliotheken gibt
die nicht für Programmiersprachen existieren immer, aber für CSS oder JavaScript
oder HTML oder eine beliebige Anzahl von Sprachen.
>> Und diese Leute hier-- kam ursprünglich aus
von Twitter-- einfach eine ganze Reihe von Arten.
Es ist eine riesige Datei hier, dass jemand schrieb,
oder jemand schrieb, im Laufe der Zeit, dass gibt Farben und Formatierungen
und so weiter, so dass ich deren Syntax Art ausleihen
und nicht, um herauszufinden, wie man das Layout meiner Form.
Dies wird auch minimierte so dass ein Computer
verstehe es aber nicht notwendigerweise ein Mensch ist.
Also das ist nur, warum die Stilisierung dort geändert.
>> Aber lassen Sie uns jetzt besser machen in Bezug auf Design,
denn wenn wir unten bleiben diese Straße zu lang ist,
unseren Kodex zu gehen unordentlich und Messier.
Lassen Sie uns also auf diese Beispiele konzentrieren sich hier.
Das letzte für heute.
>> Also hier ist ein super einfaches Version 1.0 des CS50-Website.
Es hat nur Links zu Vorträge und Lehrpläne,
und es ist mit dieser ungeordnete Liste tag-- die UL-Tag, die wir beim letzten Mal verwendet.
Und wenn in der Tat, wenn I eröffnen Seitenquelltext anzeigen,
Sie werden sehen, dass dies wirklich, wirklich einfache HTML.
Und in der Tat, auch wenn dies eine PHP-Datei unter der Haube,
es ist immer noch nur spucken nur HTML für jetzt.
>> Also, wenn ich auf Vorträge klicken, wir sehen dies geschieht.
Und wenn ich am Wochenende auf Null, sehen wir dies.
Und wenn ich auf Mittwoch, sehen wir dies.
Und das war offenbar das PDF der Dias von diesem Tag.
Alles, was ich getan habe, ist Link mit ein Anker-Tag auf diese URL hier.
>> Das ist also nur zu sagen, das ist ein ziemlich einfache Version des CS50-Website.
Mal sehen, wie es umgesetzt werden.
Wenn ich in die mvc0 Verzeichnis zu gehen, Wir werden ein paar Dateien zu sehen.
Eines ist ein README, also, wenn einige dieser zu schnell ist,
Sie können einfach herumzustochern gemächlicher später.
Und beachtet hier ist eine Datei index.php.
Es stellt sich heraus, dass, wenn Sie selbst, die menschliche,
keinen endgültigen Namen in angeben eine URL, die der Webserver in der Regel
folgert einige Standardnamen für Sie.
Ein Indexpunkt etwas ist in der Regel die Standardeinstellung.
>> Also deshalb vor einem Augenblick bei meinem Besuch diese URL hier
kein Dateiname, keine Datei Verlängerung, keine Periode in der URL.
Es wusste nur irgendwie magisch für index.php aussehen.
Es ist nur eine Konvention.
Könnte etwas heißen.
>> Also, wenn ich jetzt in zu gehen index.php, werden Sie sehen,
dass indeed-- uns gelassen der Kommentare loswerden
hier, weil es wirklich nichts Interessantes zu es--
dies ist nur hart codierte HTML.
Also das ist konsequent, obwohl, mit meinem Anspruch
dass man HTML und PHP vermischen.
Es gibt keinen tatsächlichen Programmierlogik in hier.
>> Und die anderen Dateien sind ziemlich viel genauso uninteressant.
Es ist nur hartcodierte Woche ein hier zu Woche ein m und Woche ein w,
für Montag und Mittwoch.
Und dann, wenn ich öffnen Woche null, bemerken, dass es fast identisch.
>> Und das ist eine Art Schlüssel zum Mitnehmen.
Beachten Sie nur, wie redundante dies.
Diese Dateien kaum ändern, und doch habe ich zog eine dieser copy / paste Jobs
wo ich ein file-- vermutlich in Woche zero-- kopiert
wenn Woche eine um kam, und zwickte ein paar Werte.
Wir sollten wahrscheinlich in der Lage sein, besser als dieses zu tun.
>> Also gehen wir zurück bis zu MVC und gehen in die Version ein.
Und merke ich habe eine bekam wenige Dateien, weil das, was
üblich war, alle diese Dateien nur ein Moment ago-- Wenn ich wieder auf die Version 0,
gehen wir zurück in die Index und nur postulate--
wenn ich einmal der comments-- loswerden was für ein Teil dieser Seite
ist vermutlich in jeder meiner Dateien?
Nenn es einfach aus.
Welche Zeilen dupliziert werden wahrscheinlich über all diese Seiten?
Ja?
>> STUDENT: [unverständlich].
>> DAVID J. MALAN: 1 bis 9.
Ja, absolut.
1 bis 9, außer vielleicht 8 ändert ein wenig, weil CS50
wird Vorträgen oder Woche Null oder so etwas.
Aber fast identisch.
Also all dieses Zeug ist nur Art kopiert und eingefügt.
Und es gibt ein paar anderen Linien ich denken kann
dieses sind wahrscheinlich identisch in allen Dateien.
>> STUDENT: 12 und 13.
DAVID J. MALAN: Yeah.
Klar, 12, 13, und 14 wahrscheinlich, nur weil die interessante Sachen
ist in den Zeilen 11 passiert und 10, so wie es scheint.
Also schauen wir uns die Version 1, die versucht, dies zu verbessern.
In Version 1 dieses MVC example-- wir werden Erklären Sie, was MVC Mittel in einem moment--
wenn ich in Index zu gehen, es ist irgendwie sieht ein wenig verwirrend jetzt.
Es ist nicht ganz so einfach wie zuvor.
>> Aber sobald Sie anfangen lesen Sie es sorgfältig, es ist
ziemlich einfach, was es tut.
Anscheinend Leitung 1 und Linie 8 ersetzt haben
alle von dem Zeug einfach identified-- obwohl nur für eine gute Maßnahme,
Ich ließ die ULs gibt nur für den Fall irgend Tage hatten nicht eine Liste der Dinge.
Und so verlangen, ist eine Art, wie Pfund gehören in C. Es kopiert und Pasten
der Inhalt effektiv hier in dieser Datei.
>> So in header.php, wie Sie vielleicht dem Namen entnehmen,
wird sich der Kopfzeile der Seite sein.
Es ist hier Art von verwaisten.
Es hat nur die Spitze, um sie, aber es gibt keine Inhalte unter mehr.
>> Und wenn ich mir footer derweil welche die andere Datei war mentioned--
das hier ist noch weniger interessant, aber wieder, ist es üblich, alles.
Das ist also der Fußzeile.
Dies ist der Kopfzeile.
Dies ist die Datei, ist Veränderung, also warum nicht
versuchen, ausklammern die Gemeinsamkeit mit diesen beiden Linien hier?
>> Aber wir können diese reinigen ein wenig weiter.
Ich werde weitermachen und eröffnen Version zwei, wo
wir werden sehen, dass es eine neue Datei, helpers.php.
Wir werden sehen, was das ist in einem Augenblick.
Gehen wir zu indizieren, da die Einstiegspunkt wie zuvor.
>> Und jetzt merke ich bin erfordern helpers.php nicht Kopf- oder Fußzeile.
Aber Helfer ist ein bisschen wie helpers.c und helpers.h von PSET 2
oder PSET 3 lange her, als Sie tatsächlich hat zu suchen und zu finden für diesen PSET,
und Sie zum Sortieren hatten alle Ihre Code und die Suche in einer separaten Datei.
Das ist, was ist denn hier los.
>> Und jetzt Zeile 3 sieht ein wenig anders aus.
Und es ist nur eine Zeile.
Um diese noch mehr zu machen Klar, könnte ich nur
dies tun, um stilistisch einheitlich sein mit allem, was wir sonst noch getan habe.
Aber das ist nicht wirklich Änderung der Funktionalität.
Es ist nur eine Zeile echten Code.
>> Offenbar gibt es eine Funktion irgendwo genannt render Header,
und das ist, wo die Dinge ganz schön mächtig.
Beachten Sie, dass innerhalb seiner Klammern ist das, was andere Stück Syntax?
Es ist wahrscheinlich ein wenig schwer zu sagen, aber bemerken there's-- Ich werde einige weiße setzen
Raum.
Es gibt eckige Klammern.
>> Und eckigen Klammern wir ein bisschen vor sah im Kontext der assoziativen Arrays,
die, wieder, wie Hash-Tabellen.
Und wenn Sie denken, jetzt zu C, die Reihenfolge der Argumente in eine Funktion
hat, immer die gleiche sein.
Man muss bedenken, was die bestellen ist-- x, y, z oder z, y, x--
und man muss immer ihnen in der gleichen Reihenfolge oder schauen sie auf
wenn du es vergessen hast.
>> Aber das scheint ein cleverer Weg sein der Übergabe eines beliebigen Schlüsselwert
Paaren, wobei Titel ist der Name eines Arguments in diesem Fall
und CS50 ist sein Wert.
Und die Tatsache, dass ich Diese eckigen Klammern
bedeutet hier, dass ich konnte auch in etwas passieren
wie in der Woche 1 oder 0 oder 2 oder 3.
Also haben wir parametriert haben diese Funktion in einer Weise
dass es mehrere Eingänge zu nehmen, aber jetzt ist es nur die eine.
>> Wenn ich nun in helpers.php gehen, feststellen, was es tut.
Das ist ein bisschen neuer Funktionen,
aber für jetzt nur nehmen auf den Glauben, dass dies
die Syntax, mit denen Sie definieren eine Funktion in PHP.
Sie sagen, buchstäblich Funktion.
Sie müssen nicht eine Rückkehr angeben geben, und das ist im Einklang
mit der Variablendetail früher wo man nicht wirklich stark geben.
>> Dies gibt gerade dass standardmäßig diese
nimmt ein assoziatives Array als Argument.
Und wissen Sie was?
Wenn der Benutzer nicht passieren ein in, gehen von einem Standardwert.
>> Dies ist ein Feature, dass C nicht für uns, das ist schön, denn jetzt
Daten, auch wenn Sie geben Sie es nicht etwas,
wird, zu sein Array, aber ein leerer.
Und nebenbei, Extrakt gerade tut etwas flippige
wo es nimmt alle Schlüssel daraus assoziatives Array, all die Dinge,
Sie in eckigen Klammern setzen könnte, und erzeugt aus ihnen Variablen
so dass wir schließlich Zugang um sie in footet.php und header.php.
Das ist ein wenig abstrakt, so möchte ich darauf dies.
>> In index.php, bemerken, dass ich Einleiten eines Schlüssel-Wert Paar Titel
mit einem Wert von CS50.
Wenn ich nun einen Blick auf helpers.php, bemerken, dass RenderHeader
wird das Extrahieren dieser Daten, die ich vorbei in, und dann verlangen header.php.
Was ich getan habe, ist eine Art des armen Mannes Umsetzung der nun folgenden.
>> Wenn ich öffnen header.php, Ankündigung, dass ich nicht mehr schwer
codiert das Wort CS50 in dieser Header-Datei.
Ich habe dies zwar grausam setzen benannte Funktion, HTML Sonderzeichen,
drin.
Aber bemerken, was ich getan habe.
Ich habe offene HTML bekam.
Ich habe dann offenen Kopf und offene Titel.
>> Und dann in der Titel Die offene und Tags schließen, habe ich ein wenig PHP-Code.
Und das ist ein schön, aber der Syntax, das bedeutet nur, Echo aus.
Es bedeutet wörtlich this-- Echo der following--
aber dies ist sexier zu schreiben.
Echo den Titel das ist übergeben worden.
>> Aber was denken Sie HTML Sonder char dreht sich alles um,
besonders wenn Sie einige vor HTML Erfahrung?
Welche Zeichen sein könnte gefährlich, auf eine Seite zu übergeben in
wo Sie die dynamische Generierung die Web-Seite mit Code wie diesen?
Lassen Sie mich an dieser Datei zu gehen, Version zwei, und sehen, ob ich nicht zu induzieren diese.
>> Version zwei ist dies.
Und bemerken alles ist in Ordnung, gut funktioniert.
Aber angenommen, ich gehe in die index.php und Ich festgelegt, dass der Titel meiner Seite
nicht CS50.
Es ist offen Halterung Skript Benachrichtigung Hallo Welt, in der Nähe Apostroph,
schließende Klammer, Semikolon, Stellwinkel, Schrägstrich-Skript.
>> Schrift, wie wir schließlich sehen, ist ein Tag
die Sie verwenden können, um eines anderen zu bedienen Programmiersprache namens
JavaScript-Innenseite einer Webseite.
Und jetzt bemerken die Logik hier.
Hier ist ein Schlüssel namens Titel.
Hier ist es ist verrückt langen Wert jetzt.
>> Aber wenn ich zu den Helfern page- oder besser gesagt, die Kopfseite,
Ich rufe diese Funktion an diesem Titel zuerst.
Also, wenn ich jetzt diese Seite neu laden, ich dies zu sehen, was lächerlich aussieht,
aber es ist sicher.
Es sieht einfach nur dumm.
>> Aber angenommen, statt Ich hatte das vergessen.
Und meine Worte, eine von Null verschiedene Zahl von euch wird dies vergessen
und du wirst einige fleißige bekommen Student oder Freund kommen
Ihnen am CS50 Messe oder anonym nachts Stochern auf Ihrer Webseite
und im Wesentlichen Injizieren Code ohne Wissen Sie in Ihre Website
irgendwie.
>> Denn wenn ich einfach spucken out Titel hier und Titel
sind-- auch wenn Titel wörtlich sieht wie folgt aus und PHP
als eine Sprache, die spucken kann aus anderen Sprachen Text,
das ist wörtlich gehen um diesen Tag mit zu ersetzen,
natürlich, was ich an anderer Stelle.
>> Also, wenn ich jetzt hier gehen und Nachladen nach Lösen diese Sicherheitsmechanismen,
jetzt bin Welt hallo hier.
Nun, das ist gar nicht so groß von einem umzugehen, aber man konnte etwas tun
ein wenig mehr böswillige Hier wie dort ist
andere tags-- wie wir sehen werden, sobald wir verbringen mehr Zeit in JavaScript-- wie Lage
dot href bekommt, zitat, unquote, HTTP business.com, aber das Gegenteil von dem,
aus dem zweiten Tag.
Und jetzt können Sie eine Web induzieren Seite tatsächlich sofort gehen
auf diese Seite hier.
>> Und eigentlich will ich nicht sogar um business.com gehen
weil ich nicht will zu wissen, was das ist.
Aber auch dies wird Code auslösen in dieser Seite eingespritzt werden.
Das ist also nur auf, obwohl sagen, dass wir die Einführung Super früh einige
dieser komplexeren Strukturen, es ist alles auf ein Ende zu machen, dass
dass Ihr Code ist nicht ausnutzbar.
>> So, jetzt eine dritte Version hier.
Es ist schon ein wenig schicker.
Ich habe nicht wirklich like-- die anale Seite von mir
wurde immer durch die ein wenig verärgert Tatsache, dass ich eine Funktion aufgerufen
RenderHeader und RenderFooter dass waren fast identisch.
So ist es mir eingefallen, warum nicht Ich parametrieren diese Funktionen
in nur einer genannt zu machen, haben sie nehmen ein zweites Argument
wie der Name der Vorlage, die endgültige entweder Kopf- oder Fußzeile render--?
Und dann gegebenenfalls, wenn ich will, in einigen Schlüsselwertpaare übergeben
wie ich den Titel für das zu tun header, aber nicht für die Fußzeile,
Ich könnte das tun.
>> Und jetzt, wenn ich in helpers.php gehen, es ist ein wenig komplizierter.
Und ich werde meine Hände auf dem Wave Details, aber es ist nur eine Funktion.
Also das ist ein Schritt in Richtung einer besseren Design.
>> Wir können noch einen Schritt weiter zu gehen.
Wenn ich in meinem vierten gehen Version davon, jetzt merken
dass ich etwas zu tun noch Art von kryptisch.
Und ich weiß, das ist eine viel auf einmal aufnehmen,
aber wir sind gerade ein bisschen Reinigungs Dinge.
Jetzt bin ich Putting meine Helfer Datei in einem Ordner namens
includes-- nur eine willkürliche nennen, wo ich will, um Sachen zu setzen
dass ich include-- und dann der Rest ist gleich.
>> Aber wenn ich mir jetzt in gedit, Ankündigung, die ich losgeworden
der all die anderen Dateien, und ich habe bewegt sie zum Beispiel in den hier.
Und dann in Vorlagen, Ich habe dies auch hier.
Und so ist das alles jetzt zu einem Schritt der unter Verwendung einer viel besseren Design-Muster.
Und wir sehr schnell sind werde wegziehen
von PHP Standardfunktionalität, die wir hier begann mit,
wo man einfach vermischen PHP, und Ihre HTML und CSS,
und Sie nur ausspucken und Sie über Ihren Weg zu gehen.
Es wird nicht sehr wartbar.
Genau wie in C, mit begannen wir mehrere Dateien und mehrere Funktionen
und Factoring Dinge, die aus.
Wir werden hier das gleiche tun.
Und in der Tat, in der fünften und letzten Version hier, habe ich noch eine andere Sache.
Sie können sogar mit Punkt Punkt, der, wieder, ist nur das übergeordnete Verzeichnis.
Um noch mehr auf Sicherheit bedacht sein, denn wenn ich mir die Abhör
hier für fünfte und letzte Version, Ankündigung dass ich ein Verzeichnis hier genannt
Öffentlichkeit, und dann auf den gleichen Ebene sozusagen
Ich habe gehört und Vorlagen und dann, dass Textdatei Readme.
>> Und der Grund, warum ich strukturiert es mögen this-- und so viele Web
Wirte, insbesondere diejenigen, $ 5 Monat diejenigen oder $ 10 Monate diejenigen,
wenn Sie jemals eine dieser gehabt haben services--, was so viele von ihnen tun
ist sie nur erwarten, dass Sie alle Dump Ihrer Dateien in ein Verzeichnis,
wie wir bereits mit Dieses erste Beispiel.
>> Aber sobald man den Bau von mehr starten anspruchsvolle Websites, die nur speichern
Daten, die Sie über und Dateien, die Sie interessieren egal, eigentlich Dinge zu organisieren
richtig und mit mehr Sicherheit Bewusstsein im Hinterkopf kann
wir beginnen, zu verteidigen gegen all der Freunde
dass Sie entweder in oder außerhalb dieser Klasse, die,
sobald Sie machen beginnen Programme selbst im Web,
gehen zu beginnen Kommissionierung auf Sie und auf ihnen.
>> Und so werden wir schauen letztlich auf diesem Entwurf.
Dies ist nur ein Bild dass zeigt die folgende.
Wir werden alle stellen unsere Programmierlogik in einer oder mehreren Dateien,
und wir werden einfach starten ruft jene Steuerungen.
Es ist, wo die Gehirne von unsere Websites tatsächlich sind.
Dann sind wir zu gehen blicken und Ansichten
sind so einfach wie nur getrennte files-- genannte Templates, oft.
Sie müssen nur die Ästhetik auf meiner Seite,
was ich will die Seite zu schauen like-- den Farben und dem Layout
und die Positionen der alle Variablen.
>> Und dann noch interessanter dass wir schließlich zu bekommen
ist das Modell, die gehen, gerecht zu sein das Wort, das wir schlagen auf andere Technologien
dass wir in die bringen Bild, wie echte Datenbanken
so dass, wenn Sie wollen, um Informationen zu speichern,
Sie haben nicht nur eine E-Mail senden um Ihren Proctor oder sich selbst,
Sie tatsächlich speichern sie in einer Datenbank Verwendung einer anderen Sprache als SQL bekannt.
Und so werden wir heute hier zu verlassen und bauen mit diesem am Mittwoch
und die Einführung von Datenbanken dann.
>> [Musik zu spielen]