[Powered by Google Translate] [Section 8 - komfortabler]
[Rob Bowden - Harvard University]
[Dies ist CS50. - CS50.TV]
>> Diese Woche Abschnitt Notizen sein werden ziemlich kurz,
ich werde einfach im Gespräch zu bleiben, werden Sie Jungs gehen zu halten, Fragen zu stellen,
und wir werden versuchen zu füllen, so viel Zeit wie möglich.
Eine Menge Leute denken, dass dies pset nicht unbedingt schwierig, aber es ist sehr lang.
Die pset spec selbst dauert eine Stunde, um zu lesen.
Wir geben Ihnen einen Großteil der SQL was man brauchen könnte, um zu verwenden.
Wir führen Sie durch eine Menge davon, so sollte es nicht allzu schlecht.
Hat jemand gestartet oder beendet?
Es ist das letzte pset. Oh, mein Gott.
Normalerweise gibt es ein JavaScript ein, nachdem diese, aber Kalender Dinge ändern
macht alles 1 Woche kürzer, und wir haben nicht mehr einen JavaScript pset.
Ich weiß nicht, wie diese beeinflusst, ob JavaScript wird auf die Prüfung erscheinen
oder Quiz 1.
Ich kann mir vorstellen, es wird etwas sein, wie Sie auf hohem Niveau Dinge über JavaScript wissen müssen,
aber ich bezweifle, würden wir Ihnen nur gerade JavaScript-Code
da Sie hatten nicht eine pset in ihm.
Aber das wird Zeug für Quiz überprüft werden nächste Woche.
>> Abschnitt von Fragen.
Eine Menge von diesem Zeug ist etwas schlecht formuliert, aber wir werden deshalb diskutieren.
Im Gegensatz zu C, PHP ist eine "dynamisch typisierte" Sprache. Was bedeutet das, fragen Sie?
Nun, Say Goodbye to all diejenigen, char, float, int, und andere Keywords, die Sie verwenden müssen,
bei der Deklaration von Variablen und Funktionen in C.
In PHP wird der Typ einer Variablen durch den Wert, dass es hält derzeit ermittelt.
Also, bevor wir diesen Code in eine Datei namens dynamic.php,
PHP dynamisch typisiert. Das ist wahr.
Ich bin nicht einverstanden mit der Tatsache, dass bedeutet, dass wir Abschied von char, float, int,
und anderen Schlüsselwörtern.
Der genaue Unterschied zwischen dynamisch typisierte und der alternativen,
welche statisch typisiert ist, dass dynamisch typisierte, alle Ihre Typprüfung and stuff
geschieht zur Laufzeit, während statisch typisiert es geschieht bei der Kompilierung.
Das Wort static im Allgemeinen scheint der Kompilierung Dinge bedeuten.
Ich denke, es gibt andere Verwendungen für sie, aber in C, wenn Sie eine statische Variable deklarieren,
ihre Speicherung bei der Kompilierung zugewiesen.
Hier dynamisch typisierte bedeutet nur, dass -
In C, wenn Sie versuchen, einen String und eine ganze Zahl hinzufügen, wenn Sie es zu kompilieren,
es wird sich zu beschweren, weil es sich zu sagen, dass man nicht fügen Sie einen int und einen Zeiger.
Es ist einfach nicht eine gültige Betrieb.
Das ist eine andere Sache, dass wir in einem zweiten bekommen.
Aber diese Art von Kontrolle, die Tatsache, dass es zum Zeitpunkt der Kompilierung, klagt
ist statisch Typprüfung.
Es gibt Sprachen, in denen Sie nicht brauchen, um char, float, int sagen, und alle diese Dinge,
aber die Sprache kann aus dem Kontext der Sache sagen, welchen Typ es sein soll,
aber es ist immer noch statisch typisiert.
Also, wenn Sie 51, OCaml zu nehmen, müssen Sie nie einen dieser Typen zu verwenden,
aber es wird bei der Kompilierung sagen, man kann das nicht tun, weil Sie das Mischen eines int und einen String sind.
Dynamisch typisierte bedeutet nur, dass irgendwann während der Laufzeit wirst du eine Beschwerde erhalten.
Wenn Sie auch Java vor, in der Regel verwendet, fast jeder C-Typ Sprache
wird statisch eingegeben werden, so dass C, C + +, Java, alle diejenigen sind allgemein statisch typisiert.
In Java, wenn Sie kompilieren etwas und du sagst
string s gleich neue etwas, was nicht ist eine Zeichenfolge,
das wird sich beschweren, weil diese Typen nur nicht übereinstimmen.
Das wird bei der Kompilierung beschweren.
Aber es hat auch einige dynamische Zeit Dinge wie, wenn man etwas gegossen versuchen
auf einen Typ, der spezifischer als der aktuelle Typ ist,
es gibt nichts, es bei der Kompilierung tun können, um zu überprüfen, ob diese Besetzung gelingen wird.
Java hat auch einige dynamische Typprüfung, dass so bald wie es nur geht, um dieser Codezeile
wenn es tatsächlich auszuführen, es geht um die Besetzung zu tun,
prüfen, ob dieses Besetzung war in erster Linie gilt,
und wenn es nicht war, dann wird sich darüber beschweren, dass Sie einen ungültigen Typ.
Dynamische Typprüfung.
Geben Sie diese in eine Datei namens dynamic.php.
Dynamic.php.
Ich werde entpacken diese Formatierung.
Wir haben eine variable, setzen wir es um die Zahl 7,
dann werden wir zu ihm und% s drucken -
Oh, wir drucken die Art von ihm, so gettype gehen, um den Typ der Variablen zurück.
Wir stehen noch Drucken des Typs immer und immer wieder.
Wir haben gerade php.dynamic.php.
Wir werden sehen, dass es Veränderungen von Integer in String Boolean wie wir gehen durch.
In C gibt es keinen Datentyp Boolean, gibt es keine String-Datentyp.
Es gibt char * und Boolean nur tendenziell int oder char oder so etwas.
In PHP diese Arten nicht existieren, und das ist einer der großen Vorteile von PHP über C -
dass die String-Operationen sind viel einfacher in PHP als C. Sie gerade arbeiten.
>> So kommen wir wieder hier.
Wir rannten dynamic.php.
Das sagt dem PHP-Interpreter namens php, den PHP-Code in dynamic.php laufen.
Wenn Sie irgendwelche Fehler in der Datei haben, wird der Dolmetscher sagen!
Der Dolmetscher ist dies ein weiterer großer Unterschied zwischen PHP und C
In C müssen Sie etwas kompilieren und dann laufen, dass kompilierte Datei.
In PHP Sie nie kompiliert nichts.
So der PHP-Interpreter ist im Grunde nur der Lektüre dieses Zeile für Zeile.
Es trifft var = 7 dann printf trifft dann trifft es var dann trifft es printf und so weiter.
Es ist ein bisschen zu kompilieren es tut, und es speichert die Ergebnisse
so, wenn Sie das Skript ausführen später können Sie tun, einige,
aber im Grunde ist es eine Zeile für Zeile Art der Sache.
Das bedeutet, dass ein Großteil der Optimierungen, die wir bekommen in C,
Lust auf das Kompilieren, es ist nur in der Regel kann der Compiler eine Menge Tricks für Sie tun.
Es kann sich unbenutzte Variablen, kann er alle diese Art von Dingen,
sie tun können Endrekursion.
In PHP du wirst doch nicht um diesen Vorteil zu erhalten
weil es nur geht zu starten Ausführen Zeile für Zeile für Zeile,
und es ist nicht wirklich erkennen diese Dinge so einfach
da es nicht ein großes compilation Pass über die Sache und dann Ausführung;
es ist nur Zeile für Zeile.
Damit ist der Dolmetscher.
>> Zurück zu unserem dynamischen Typisierung: pretty cool, eh?
Sie definitiv nicht tun konnte, dass in C!
Nun, sehen, wenn Sie herausfinden können, welche Art von jeder der folgenden Werte.
Dieses als Referenz.
So 3,50. Welche Art denkst du, das wird sein?
Hier sind die Typen, die wir haben.
Wir haben bools, Zahlen, Fließkommazahlen, Strings, Arrays, Objekte,
und dann Ressourcen, die ist ein bisschen vage.
Ich denke, es ist eigentlich ein Beispiel hier.
Dann gibt es NULL. NULL ist ein spezieller Typ.
Im Gegensatz zu C, wo NULL ist nur ein Zeiger mit der Adresse 0,
in PHP ist NULL seine eigene Art, wo die einzig gültige, was dieses Typs ist NULL.
Dies ist viel nützlicher für Fehlerprüfung.
In C, wo wir hatten dieses Problem, wo, wenn Sie NULL zurückgeben,
Bedeutet das, dass du wieder einen NULL-Zeiger oder mit NULL auf Fehler bedeuten
oder alle dieser Verwirrung, die wir an einem Punkt hatte.
Hier gibt NULL bedeutet in der Regel Fehler.
Eine Menge Dinge auch return false für Fehler.
Aber der Punkt der NULL-Typ ist, ist das einzige, was der NULL-Typ NULL.
Dann Rückruf ist wie Sie einige anonyme Funktionen definieren können.
Sie haben noch um der Funktion einen Namen, aber du wirst nicht mit, dass hier zu tun haben.
Mit Blick auf die Typen, die sie von uns erwarten, zu wissen,
was denkst du der Typ von 3,50 ist? >> [Schüler] Float.
Yeah.
So dann hier, was denkst du der Typ dafür ist? >> [Schüler] Array.
Yeah. Der erste war Schwimmer, das zweite ist ein Array.
Beachten Sie, dass diese Anordnung nicht wie ein C-Array
wo man Index haben 0 gewissen Wert hat, hat den Index 1 einen Wert.
Hier sind die Indices a, b und c und die Werte 1, 2, und 3.
In PHP gibt es keinen Unterschied zwischen einem assoziativen Arrays und nur einer regelmäßigen Anordnung
wie man es von ihm in C denke
Es ist gerade diese, und unter der Haube eine regelmäßige Anordnung ist nur ein assoziatives Array
wobei 0 Karten auf einen Wert in der gleichen Weise ein Karten bis zu einem gewissen Wert.
Aus diesem Grund kann PHP ziemlich schlecht für wirklich schnell code / Benchmarking Dinge
da in C, wenn Sie ein Array wirst du wissen, dass der Zugriff auf ein Mitglied ist konstante Zeit.
In PHP Zugriff auf ein Mitglied ist, wer weiß, wie viel Zeit?
Es ist wahrscheinlich konstant, wenn es Hashes richtig.
Wer weiß, was es wirklich tun unter der Haube?
Sie wirklich brauchen, um bei der Umsetzung, um zu sehen, wie es geht, um damit umzugehen.
Also fopen.
Ich denke, hier lasst uns einfach PHP-Handbuch fopen an der Rückgabetyp aussehen.
Wir sehen hier können Sie nachschlagen ziemlich jede Funktion in der PHP-Handbuch
und dies ist eine Art der Manpage von PHP.
Der Rückgabetyp wird Ressource sein.
Das ist, warum ich es sah, weil wir nicht wirklich definiert hat Ressource.
Die Idee der Ressource in C Sie Art bekam ein FILE * oder was auch immer;
in PHP die Ressource ist Ihr FILE *.
Es ist, was du gehst aus lesen werden, ist es, was du gehst zu sein Schreiben.
Es ist in der Regel extern, so ist es eine Ressource, die Sie Dinge aus ziehen kann und werfen Dinge.
Und schließlich, was ist die Art von NULL? >> [Schüler] NULL.
Yeah. So ist die einzige Sache, die NULL ist NULL.
NULL NULL ist.
>> Ein Merkmal der PHP-Typ-System (zum Besseren oder zum Schlechteren) ist seine Fähigkeit, Arten jonglieren.
Wenn Sie eine Zeile PHP-Code die Werte von verschiedenen Arten vereint schreiben,
PHP wird versuchen, das Vernünftige zu tun.
Probieren Sie jede der folgenden Zeilen PHP-Code. Was ausgedruckt?
Ist es das, was Sie erwartet haben? Warum bzw. warum nicht?
Diese Tatsache über PHP macht es, was wir schwach typisierte nennen.
Schwach typisiert und stark typisiert,
Es gibt verschiedene Anwendungen für diese Begriffe,
aber die meisten Leute benutzen schwach typisiert und stark typisiert, um diese Art der Sache bedeuten,
wo ("1" + 2); das funktioniert.
In C würde es nicht funktionieren.
Sie können sich vorstellen dies nicht funktioniert.
Eine Menge Leute verwechseln dynamische Typisierung und schwache Typisierung und statische Typisierung und starke Typisierung.
Python ist ein weiteres Beispiel für eine Sprache ist, die dynamisch eingegeben.
Sie können rund um Typen in Variablen zu werfen und es wird zur Laufzeit bestimmen
irgendwelche Fehler checkings.
In Python, es wird dazu führen, und es wird zu sehen ("1" + 2);
und dies wird scheitern, weil sagt, es kann nicht fügen Sie einen String und einen Integer.
In PHP, die ebenso dynamisch typisierte ist, wird dies nicht scheitern.
Schwache Typisierung hat mit der Tatsache, dass es Dinge tut mit Typen zu tun
die nicht wirklich Sinn unbedingt.
So ("1" + 2); Ich kann mir vorstellen, dass ist die Saite 12, kann ich vorstellen, dass es die Zeichenfolge 3,
Ich kann mir vorstellen, dass die Zahl 3.
Es ist nicht unbedingt gut definiert, und wir wahrscheinlich hier zu sehen
dass, wenn wir drucken ("1" + 2); es ist wahrscheinlich am Ende wird verschiedene
als das Drucken (1 + "2").
Und diese Tendenz zu sein, meiner Meinung nach, zum Schlechteren.
Hier können wir versuchen diese.
Ein weiterer kleiner Trick über PHP ist, dass Sie nicht brauchen, um tatsächlich die Datei schreiben.
Es hat diesen Befehl Modus ausgeführt werden.
So php-r, dann können wir in der hier das Kommando zu werfen:
"Print ('1 '+ 2);" und ich werde eine neue Zeile zu werfen.
Dieses gedruckte 3.
Es sieht so aus 3 druckt, und es ist die ganze Zahl 3.
So, jetzt versuchen wir es anders herum:
"Print (1 + 2");
Wir bekommen 3 und wird es auch gehen, um ganze 3? Ich habe ehrlich gesagt keine Ahnung.
Es sieht aus wie das ist konsequent.
Es gibt nie eine Chance, es ist die Zeichenkette 12 oder so etwas
weil PHP, im Gegensatz zu JavaScript und Java auch
verfügt über einen separaten Antrieb für Verkettung.
Verkettung in PHP ist dot.
So dass der Druck (1 '2 '.); Wird uns 12.
Dieser neigt dazu, zu Verwirrung führen, wo die Menschen so etwas wie str + = tun versuchen
eine andere Sache, die sie hinzufügen möchten bis zum Ende ihrer Saite, und das ist zum Scheitern verurteilt.
Sie müssen str tun. =
Also nicht vergessen Verkettung in PHP ist ein Punkt.
Andere Dinge zu versuchen: print ("CS" + 50);
Ich habe Ihnen gesagt, dass es keine Hoffnung dass dies zu CS50
Seit Verkettung ist nicht +.
Was denkst du, das wird am Ende wird?
Ich habe ehrlich gesagt habe absolut keine Ahnung.
Es sieht aus wie es nur 50.
Er sieht die Zeichenfolge, und ich wette, wenn wir 123CS setzen -
Er sieht die erste Saite, versucht er, eine ganze Zahl von ihm oder eine Reihe von ihm zu lesen.
In diesem Fall sieht 123CS.
"Das macht keinen Sinn, als eine ganze Zahl, also bin ich gerade dabei, von 123 zu denken."
So 123 + 50 wird 173 sein.
Und hier beginnt der Lektüre dieses als integer.
Es sieht nichts, so dass es nur behandelt es als 0 ist. So 0 + 50 wird 50 sein.
Dieses Ich gehe davon wird etwas Ähnliches zu tun.
Ich denke, 99.
Ja, weil es geht um das erste -
So 99.
Hier (7.10), wenn dies C, was wäre das zurück?
[Schüler] 1. >> Ja, wäre es ein, weil 10/7 spaltet 2 Zahlen.
Eine ganze Zahl, durch eine Ganzzahl wird eine ganze Zahl zurück.
Es kann nicht wieder 1 Punkt was auch immer das sein würde, so ist es nur geht auf 1 zurück.
Hier Drucken (7.10); es wird tatsächlich zu interpretieren, dass.
Und das bedeutet, dass, wenn Sie wirklich wollen, Integer Rundung und Sachen wie das zu tun,
Sie print (floor (7.10)) zu tun;
In C ist es wahrscheinlich seltsam, dass man auf Integer Abschneiden regelmäßig vertrauen,
aber in PHP können Sie nicht, weil es wird automatisch in einen Schwimmer.
Und dann (7 + true); was denkst du, das wird sein?
Ich vermute, 8, wenn es sich auf zu interpretieren, wie ein wahr.
Es sieht so aus 8 ist.
>> So alles, was wir in den letzten 10 Minuten sind Sie absolut nie tun sollte getan habe.
Sie werden sehen, Code, der dies tut.
Es muss nicht so einfach sein wie dies.
Sie hätten zwei Variablen und 1 variable passiert ein String sein
und die andere Variable zufällig ein int sein, und dann fügen Sie diese Variablen zusammen.
Da PHP dynamisch typisiert und es wird nicht jede Art Prüfung für Sie
und da es schwach typisiert und da wird es einfach automatisch werfen diese Dinge zusammen
und alles wird nur funktionieren, ist es schwierig, sogar wissen, dass diese Variable muss ein String jetzt sein,
also sollte ich nicht fügen Sie es auf diese Variable, die ein Integer ist.
Best Practice ist, ob eine Variable ein String ist, halten Sie es als String immer.
Wenn eine Variable vom Typ int, halten Sie es als int immer.
Wenn Sie mit Zahlen und Strings umgehen,
können Sie varsint - das ist JavaScript.
Intval. Ich tue dies die ganze Zeit. PHP-und JavaScript-mische ich alles.
So intval wird, um den ganzzahligen Wert einer Variablen zurück.
Wenn wir in "print (intval ('123 ')) übergeben, erhalten Sie 123.
Intval selbst nicht, um die Prüfung für uns, dass es ausschließlich ist eine ganze Zahl zu tun.
Das PHP Handbuch gibt es nur so viele Funktionen zur Verfügung,
so hier denke ich, was ich verwenden is_numeric erste.
Ich vermute, dass false zurückgegeben.
Das ist eine andere Sache, die wir haben ist vorbei === gehen.
So is_numeric ('123df '), würden Sie nicht dieses als is_numeric denken.
In C müssten Sie durchlaufen alle Zeichen
und überprüfen Sie, ob jedes Zeichen Ziffer oder was auch immer.
Hier is_numeric wird das für uns tun,
und es ist wieder falsch.
Also, wenn ich das gedruckt, druckte es nichts, so dass ich hier bin im Vergleich, um zu sehen,
hast du zufällig falsch sein? Und so jetzt ist es Ausdruck 1.
Anscheinend gibt 1 als wahr anstelle von Druck wahr, wie wahr.
Ich frage mich, wenn ich print_r tun. Nein, es ist immer noch ein.
>> Gehen wir zurück zu === == noch existiert,
und wenn man Tommy reden wird er sagen == ist völlig in Ordnung.
Ich werde sagen, dass == ist schrecklich, und Sie sollten nie benutzen. ==
Der Unterschied ist, dass == Dinge vergleicht
wo es wahr sein kann, auch wenn sie nicht die gleiche Art sind,
während === vergleicht Dinge und es zunächst prüft sie sind vom gleichen Typ?
Ja. Okay, jetzt werde ich sehen, ob sie zu vergleichen eigentlich gleich sein.
Sie sonderbare Dinge wie 10 gleich - mal sehen, was da steht.
So ('10 '== '1 e1');
Diese true zurück.
Hat jemand irgendwelche Vermutungen, warum dies gibt true?
Es ist nicht nur darüber. Vielleicht ist das ein Hinweis.
Aber wenn ich, dass die Änderung eines F - verdammt es! Ich halte doppelte Anführungszeichen benutzt.
Der Grund für die doppelte Anführungszeichen zu mir schreit, ist, weil ich diese in doppelte Anführungszeichen habe setzen.
So konnte ich entkommen die Anführungszeichen in hier, aber einfache Anführungszeichen erleichtern.
So ('10 '== '1 f1'); druckt nicht wahr. ('10 '== '1 E1'); druckt wahr.
[Schüler] Ist es hex? >> Es ist nicht hex, aber es ist nahe, dass, wie es ist -
1e1, wissenschaftliche Notation.
Er erkennt als 1 1e1 * 10 ^ 1 oder was auch immer.
Das sind gleich Zahlen.
Wenn wir === dann tun, es wird falsch sein.
Ich habe eigentlich keine Ahnung, ob wir tun == was (10 und '10abc ');? Gut. Also das ist wahr.
So wie wenn man (10 + '10abc ') haben, und es wäre 20,
hier (10 == '10abc '); wahr ist.
Noch schlimmer sind Dinge wie (false == NULL); gilt
oder (false == 0); wahr ist, (false == []);
Es gibt seltsame Fälle von - Das ist einer jener seltsamen Fällen.
Beachten Sie, dass (false == []); wahr ist.
('0 '== False); wahr ist.
('0 '== []); Falsch ist.
So == ist in keiner Weise transitiv.
a kann gleich b und a kann gleich c,
aber b vielleicht nicht gleich c.
Das ist mir ein Greuel, und Sie sollten immer. ===
[Schüler] Können wir tun! == Wie gut? >> [Bowden] Ja.
Das Äquivalent wäre! = Und! ==.
Dies ist tatsächlich in der pset spec gebracht
wo eine Menge von Funktionen zurück -
Das PHP Handbuch ist gut über diese.
Es stellt in einem großen roten Feld "Dies wird false zurück, wenn es ein Fehler."
Aber wieder 0 ist eine durchaus vernünftige Sache zurückzukehren.
Denken Sie über jede Funktion, die voraussichtlich eine ganze Zahl zurückzugeben.
Sagen wir diese Funktion soll die Anzahl der Zeilen in einer Datei oder etwas zählen.
Unter normalen Umständen, übergeben Sie diese Funktion eine Datei
und es wird eine ganze Zahl, die die Anzahl der Zeilen darstellt zurückzukehren.
So 0 ist eine durchaus vernünftige Zahl, wenn die Datei ist nur leer.
Aber was, wenn Sie sie eine ungültige Datei übergeben und die Funktion geschieht mit return false
Übergeben Sie eine ungültige Datei?
Wenn Sie gerade tun == Sie nicht Differenzierung der Fall zwischen ungültigen Datei und leere Datei.
Immer. ===
Das ist alles von denen.
>> In PHP ist die Array-Typ anders aus, was Sie in C eingesetzt
In der Tat, können Sie bereits bemerkt haben, diese vor, als sie sah, dass dies vom Typ Array ist.
Die Klammer-Syntax ist neu in PHP 5.4, die die neueste Version von PHP ist.
Bevor diese mußte man immer Array geschrieben ('a' -> 1, 'b' -> 2.
Das war der Konstruktor für ein Array.
Jetzt PHP hat endlich der schöne Syntax nur eckigen Klammern kommen,
das ist einfach so viel besser als Array.
Aber wenn man bedenkt PHP 5.4 ist die neueste Version,
auftreten können Orte, die noch nicht einmal PHP 5.3.
Im Laufe des Sommers haben wir lief in dieser Frage, wo PHP 5.3 war, was wir auf dem Gerät hatte,
aber der Server, dass wir alle unsere Klasse Buch eingesetzt und und all das Zeug zu unterbreiten
war PHP 5.4.
Nicht wissend, wir 5,3 entwickelt, stieß auf 5,4,
und jetzt plötzlich keiner unserer Code funktioniert
da passiert es Veränderungen zwischen 5,3 und 5,4 haben
die nicht rückwärts kompatibel,
und wir haben zu gehen und beheben Sie alle unsere Sachen, die nicht für PHP 5,4 funktionieren.
Für diese Klasse, da das Gerät hat zwar PHP 5.4,
Es ist völlig in Ordnung, eckigen Klammern verwenden.
Aber wenn Sie schauen, bis Dinge rund um das Internet,
wenn Sie schauen, bis du eine Art von Array Zeug, wahrscheinlich wirst du sehen,
der Zauber aus array Konstruktorsyntax denn das ist schon seit PHP war geboren wurde
und eckige Klammer-Syntax gibt es schon seit den letzten paar Monaten
oder wenn 5,4 kam um.
Dies ist, wie Sie index.
Just in C gefällt, wie würden Sie Index in eckigen Klammern wie $ array [0], $ array [1], $ array [2],
Sie Index auf die gleiche Weise, wenn Sie Ihre Indices Strings passieren.
So $ array ['a'] und $ array ['b'].
$ Array [b]. Warum sollte dies falsch sein?
Es wird wahrscheinlich eine Warnung, aber immer noch funktionieren. PHP neigt dazu, das zu tun.
Es neigt dazu, nur: "Ich werde mit Ihnen darüber zu warnen, aber ich werde einfach weitermachen
"Und tun, was ich kann."
Es wird wahrscheinlich übersetzen diese in einen String,
aber es ist möglich, dass zu irgendeinem Zeitpunkt in der Vergangenheit jemand gesagt
definieren b als "HALLO WELT".
So, jetzt b konnte eine Konstante und $ array sein [b] wird tatsächlich tun "HALLO WELT".
Ich denke, an diesem Punkt, oder zumindest unsere PHP-Einstellungen,
Wenn Sie Index in ein Array versuchen, dass Schlüssel nicht vorhanden ist, wird es scheitern.
Ich glaube nicht, es wird nur warnen.
Oder zumindest kann man es so eingestellt, dass es nicht nur warnen, nicht Sie, es ist nur gerade nach oben ausfällt.
>> Die Art und Weise überprüfen, ob es tatsächlich ein solcher Index ist isset.
So isset ($ array ['HALLO WELT']) false zurück.
isset ($ array ['b']) gibt true zurück.
Sie können mischen diese Syntax.
Ich bin mir ziemlich sicher, was das Array würde am Ende wird es - Wir können es testen.
Oh, ich brauche PHPWord.
Dies ist das Mischen der Syntax, wo Sie angeben, welche der Schlüssel
und Sie müssen nicht angeben, was der Schlüssel ist.
So 3 hier ist ein Wert.
Sie haben nicht ausdrücklich gesagt, was seine wichtigsten sein wird.
Was denken Sie seine wichtigsten sein wird?
[Student] 0. >> Ich vermute 0 nur, weil es das erste, das wir nicht angegeben haben ist.
Wir können tatsächlich ein paar dieser Fälle.
So print_r zu drucken rekursiv. Es druckt das gesamte Array.
Es wäre zu drucken Teilfelder des Array, wenn es welche gibt.
So print_r ($ array); php.test.php.
Es sieht wie es sie gab 0.
Es gibt tatsächlich etwas im Auge behalten, aber wir werden wieder, um es in einer Sekunde.
Aber was, wenn ich diesen Index 1 zu passieren?
PHP nicht zwischen String-Indizes und Integer-Indizes differenzieren,
deshalb an dieser Stelle Ich habe gerade einen Index 1 definiert, und ich kann sowohl $ array [1] und $ array ['1 '] zu tun
und es werden die gleichen Index und der gleiche Schlüssel sein.
So, jetzt was denken Sie 3 sein wird? >> [Student] 2. >> [Bowden] Ich vermute, 2 bin.
Yeah. Es ist 2.
Was passiert, wenn taten wir dies ist 10, das 4? Was denken Sie, der Index 3 sein wird?
Ich denke, 11.
Meine Vermutung, was PHP tut - und ich glaube, ich habe das schon mal gesehen -
ist es nur verfolgt, was die höchste numerischen Index es so weit ist verwendet wird.
Es wird nie eine String-Index bis 3 zuzuordnen. Es wird immer ein numerischer Index sein.
So verfolgt die höchste es bisher zugewiesen ist, was 10 werden passiert,
und es wird auf 11 bis 3 geben.
Was ich schon sagte, bemerkt, wie er druckt dieses Array wird.
Er druckt Schlüssel 10, Pos. 4, Pos. 11, Taste d drücken.
Oder sogar lass es uns tun -
Ich glaube, ich habe nicht einen 0, aber es ist Druck 1, 2, 3, 4.
Was ist, wenn ich hier wechseln? Oder nehmen wir eigentlich schaltet diese 2.
Nun druckt 2, 1, 3, 4.
PHP Arrays sind nicht nur wie Ihre regelmäßigen Hash-Tabelle.
Es ist durchaus sinnvoll, sie als Hash-Tabellen 99% der Zeit denken.
Aber in Ihrem Hash-Tabellen gibt es kein Gefühl von der Reihenfolge, in der die Dinge eingefügt wurden.
So, sobald Sie fügen Sie ihn in Ihren Hash-Tabelle,
davon gibt es keine verknüpfte Liste, und man konnte in einer verketteten Liste zu beurteilen
das zuerst eingefügt.
Aber hier haben wir 2 eingefügt erste und es weiß, wann es gedruckt ist, diese Array, 2 zuerst kommt.
Es ist nicht ausdrucken in nur einer beliebigen Reihenfolge.
Die technischen Daten-Struktur, dass es mit ist eine geordnete Karte
so ordnet Werten Schlüssel zu und erinnert sich an die Reihenfolge, in der die Schlüssel eingefügt wurden.
Im Grunde ist es zu einigen Komplikationen, wo es ist ärgerlich, tatsächlich -
Angenommen, Sie haben eine Reihe 0, 1, 2, 3, 4, 5
und Sie möchten, nehmen Sie Index 2.
Ein Weg, es zu tun, mal sehen, wie das aussieht.
0, 2, 1, 3, 4.
Unset passiert, um beide Variablen und Array-Indizes aufzuheben.
So unset ($ array [2]);
Nun, was ist das wohl aussehen? 2 ist einfach weg, also ist das völlig in Ordnung.
Mehr ärgerlich ist, wenn man die Dinge tatsächlich wie ein Array sein wollen.
Ich lege Zufallszahlen.
Jetzt bemerkt meinen Indizes.
Ich will es genau wie ein C-Array sein, wo es von 0 bis Länge geht - 1
und ich kann über sie als solche zu durchlaufen.
Aber sobald ich den zweiten Index, was im Index 3 war unset nicht geworden Index 2.
Stattdessen entfernt nur diesen Index und jetzt gehen Sie 0, 1, 3, 4.
Dies ist durchaus sinnvoll.
Es ist nur ärgerlich, und Sie haben, um Dinge wie array splice tun. Yeah.
>> [Schüler] Was würde passieren, wenn Sie ein mussten for-Schleife
und Sie wollten über alle Elemente gehen?
Wenn es 2 getroffen, wäre es immer nachgeben?
Iteration über ein Array. Es gibt 2 Möglichkeiten, wie Sie es tun können.
Sie können einen regulären for-Schleife.
Dies ist ein weiterer Komplexität von PHP.
Die meisten Sprachen, würde ich sagen, haben eine Art von Länge oder len oder etwas
Angabe der Länge eines Arrays.
In PHP ist es zählen.
So count ($ array); $ i + +)
Lasst uns einfach print ($ array [$ i]);
Notice: Undefined offset: 2.
Es ist einfach zum Scheitern verurteilt.
Dies ist der Grund, dass in den meisten Fällen, müssen Sie nie durchlaufen ein Array wie folgt.
Es könnte eine Übertreibung sein, aber Sie müssen nie durchlaufen ein Array wie folgt
weil PHP bietet seinen foreach-Syntax, wo foreach ($ array as $ item).
Nun, wenn wir drucken ($ item); - wir werden darüber diskutieren in einem zweiten - das ist völlig in Ordnung, funktioniert.
Die Art und Weise, dass foreach funktioniert, ist das erste Argument ist das Array, dass Sie durchlaufen.
Und das zweite Argument, Punkt, durch jeden Durchlauf der for-Schleife
es wird auf die nächste, was im Array zu nehmen. Also denken Sie daran das Array hat einen Auftrag.
Das erste Mal durch die for-Schleife, wird Gegenstand, der bis 123 sein,
dann wird es 12 sein, dann wird es 13 sein, dann wird es 23 sein, dann wird es 213 sein.
Dinge wirklich seltsam, wenn Sie so etwas wie foreach tun.
Mal sehen, was passiert, weil man nie sollte dies tun.
Was, wenn wir unset ($ array [1]);
Das war wohl zu erwarten.
Du bist auf diesem Array iterieren, und jedes Mal Sie Entschärfen der erste Index.
So für den Index 0, findet die erste Sache, Element auf den Wert 0, so es geht um 123 sein.
Aber innerhalb der for-Schleife wir unset Index 1, so dass Mittel 12 ist weg.
So drucken. PHP_EOL.
PHP_EOL ist nur newline, aber es ist technisch tragbaren
da Zeilenumbrüche in Windows unterscheidet sich von Zeilenumbrüche auf Mac und UNIX.
Auf Windows-Zeilenumbruch wird \ r \ n, während überall sonst eher nur um \ n sein.
PHP_EOL ist so konfiguriert, dass nutzt es, was das Newline Ihres Systems ist.
Drucken, so dass. Lassen Sie uns nicht print_r ($ array) am Ende.
Ich hatte keine Ahnung, dass das wäre das Verhalten sein.
Artikel dauert noch auf den Wert 12, obwohl wir 12 bevor wir jemals auf sie aus dem Array unset.
Nehmen Sie nicht mein Wort, aber es sieht aus wie foreach erstellt eine Kopie des Arrays
und dann Artikel nimmt alle Werte dieser Kopie.
Also selbst wenn Sie ändert das Array innerhalb der for-Schleife
es wird nicht zu kümmern. Artikel wird auf die ursprünglichen Werte zu nehmen.
Lassen Sie uns versuchen unscharf ist.
Was ist, wenn dies $ array [1] = "Hallo";
Auch wenn wir "Hallo" put in das Array, Punkt nimmt nie auf diesen Wert.
Es gibt eine andere Syntax, um Loops foreach
wo Sie 2 Variablen durch einen Pfeil getrennt.
Diese erste variable wird der Schlüssel dieser Wert sein,
und das zweite Variable wird exakt das gleiche Element sein.
Dies ist hier uninteressant, aber wenn wir zurück zu unserem ursprünglichen Fall von 'a' zu gehen -> 1,
"B" -> 1,
hier, wenn wir für jedes Array als Element nur durchlaufen, ist Gegenstand, der 1 sein jede einzelne Zeit.
Aber wenn wir wollen auch den Schlüssel mit diesem Element verbunden wissen
dann tun wir as $ key -> $ item.
So können wir jetzt tun, print ($ key. ':'.
Jetzt ist es Iteration über und Drucken jede Taste und die damit verbundenen Wert.
>> Eine weitere Sache, die wir in foreach-Schleifen tun können, ist sehen Sie möglicherweise die folgende Syntax.
Ampersands vor Variablennamen sind in der Regel, wie PHP Referenzen tut.
Wo Referenzen sind sehr ähnlich Zeiger,
Sie müssen nicht Zeiger, so dass Sie nie mit Speicher direkt.
Aber Sie haben Hinweise, wo 1 Variable bezieht sich auf die gleiche Sache wie eine andere Variable.
Innerhalb von hier machen wir $ item. Gehen wir zurück auf 1, 10.
Lasst uns $ item + +; die noch in PHP. Sie können immer noch + +.
php.test.php. Ich habe sie zu drucken. print_r ($ array);
Wir drucken 2, 11.
Wenn ich nur foreach ($ array as $ item) getan hatte dann Punkt wird der Wert 1 sein
das erste Mal durch die Schleife. Es wird 1 bis 2 erhöht und dann sind wir fertig.
So dann wird es durch den zweiten Durchlauf der Schleife zu gehen und dieses Element ist 10.
Es Schritten Artikel 11 und dann das ist nur weggeworfen.
Dann haben wir print_r ($ array); und mal sehen, dass dies nur 1 ist, 10.
So das Inkrement wir taten, war verloren.
Aber foreach ($ array as & $ item)
Jetzt ist dieser Artikel das gleiche Element wie dieses hier. Es ist die gleiche Sache.
So $ item + + ist die Veränderung Array 0.
Grundsätzlich kann man auch tun, $ k -> $ item und Sie können $ zu tun array [$ k] + +;
>> So andere Weise das zu tun, sind wir frei, Artikel zu ändern,
aber das wird nicht verändert unsere ursprüngliche Array.
Aber wenn wir k, die unsere Schlüssel verwenden, können wir dann nur Index in unser Angebot und über diesen Schlüssel
und erhöhen, dass.
Diese mehr direkt unseren ursprünglichen Array.
Sie können sogar tun, wenn Sie aus irgendeinem Grund die Fähigkeit zu verändern wollte -
Eigentlich ist dies durchaus sinnvoll.
Du hast nicht haben wollen, um $ array schreiben [$ k] + +,
Sie wollte nur $ item schreiben + + aber immer noch sagen wollte if ($ k === 'a')
dann erhöhen Element und dann ausdrucken unser Angebot.
Und was jetzt erwarten wir print_r zu tun? Welche Werte sollen gedruckt werden?
[Schüler] 2 und 10. >> [Bowden] Nur wenn der Schlüssel war 'a' wissen wir eigentlich so drucken.
>> Sie werden wahrscheinlich sehr selten, wenn überhaupt, müssen Funktionen in PHP zu definieren,
aber man könnte etwas Ähnliches, wo Sie eine Funktion wie die Funktion auch immer definieren.
Normalerweise würde man sagen ($ foo, $ bar) und definieren Sie dann es auch immer sein.
Aber wenn ich das tue, dann heißt das, dass was auch immer, was auch immer nennt,
was nennt baz, so das erste Argument übergeben baz können geändert werden.
Lasst uns $ foo + +;
und innerhalb von hier machen wir baz ($ item);
Jetzt sind wir eine Funktion aufzurufen.
Das Argument durch Bezugnahme aufgenommen wird, was bedeutet, dass, wenn wir modifizieren
wir ändern die Sache, die übergeben wurde
Und Drucken wir erwarten - wenn ich durcheinander Syntax - wir haben 2, 11,
so wurde tatsächlich erhöht.
Bemerken wir müssen Verweise auf 2 Plätzen.
Was ist, wenn ich das tat? Was bedeutet das?
[Schüler] Es wird sich ändern. >> Ja.
Artikel ist nur eine Kopie des Wertes im Array.
So Element wird auf 2 ändern, aber das array ['a'] wird noch 1 sein.
Oder was, wenn ich das tun?
Jetzt Element wird als Kopie an baz gesendet.
So ist die Kopie des Arguments wird auf 2 erhöht werden,
aber Sache selbst wurde nie auf 2 erhöht.
Und Artikel ist dasselbe wie array Halterung was auch immer,
so daß Array wurde nie inkrementiert.
So auch jene Orte brauchen.
>> PHP ist in der Regel ziemlich schlau darüber.
Man könnte denken, ich will als Referenz zu übergeben -
Das war eigentlich eine Frage nach einem der pset.
Es war ein Questions.txt Sache, wo man sagt,
Warum möchten Sie vielleicht dieses struct als Referenz zu übergeben?
Was war die Antwort auf diese Frage?
[Schüler] So müssen Sie nicht etwas Großes zu kopieren. >> Ja.
Eine Struktur kann beliebig groß sein, und wenn Sie passieren die struct als Argument
es braucht, um diese gesamte struct kopieren, um es an die Funktion übergeben,
Wenn Sie dagegen nur passieren die struct durch Bezugnahme
dann muss nur eine 4-Byte-Adresse als Argument an die Funktion kopieren.
PHP ist ein bisschen schlauer.
Wenn ich eine Funktion und ich gebe es eine Reihe von 1000 Dinge,
heißt das, es ist zu haben, um alle 1.000 von diesen Dingen kopieren
um es in die Funktion übergeben? Es muss nicht, dass sofort tun.
Wenn innerhalb dieser Funktion ist es eigentlich nie verändert foo,
so if ($ foo === 'Hallo') return true.
Beachten wir eigentlich nie das Argument innerhalb dieser Funktion geändert
was bedeutet, dass alles, was in übergeben wurde, wie foo nie kopiert werden muss
weil es nicht zu modifizieren.
So wie PHP funktioniert, ist die Argumente werden immer per Referenz übergeben
bis Sie wirklich versuchen, es zu ändern.
Nun, wenn ich $ foo + + sagen, es wird nun eine Kopie des Originals foo und die Kopie ändern.
Das spart etwas Zeit.
Wenn Sie noch nie berührt sind diese massive Array, die Sie nie wirklich zu modifizieren,
es muss nicht um die Kopie zu machen,
während, wenn wir setzen diese kaufmännisches, dass es nicht einmal zu kopieren bedeutet
auch wenn Sie sie ändern.
Dieses Verhalten wird als copy-on-write.
Du wirst es in anderen Orten zu sehen, vor allem, wenn Sie ein Betriebssystem Kurs zu nehmen.
Copy-on-Write ist eine ziemlich übliche Muster, wo Sie nicht brauchen, um eine Kopie von etwas zu machen
es sei denn, es ist wirklich zu ändern. Yeah.
[Schüler] Was, wenn Sie hatten die Schrittweite im Test
so dass nur ein Element von 1.000 müsste geändert werden?
Ich bin nicht sicher.
Ich denke, es wäre die ganze Sache zu kopieren, aber es ist möglich, es ist klug genug, dass -
Eigentlich, was ich denke, ist vorstellbar hatten wir ein Array, das wie folgt aussieht: $ array2 = [
Dann Index 'a' ist ein Array von [1 2 3 4], und Index "b" ist ein Array von wie auch immer.
Ich brauche Kommas zwischen all jene. Stell dir vor es gibt Kommas.
Then 'c' ist der Wert 3.
Okay.
Jetzt sagen wir, wir tun $ baz ($ array2);
wo baz nicht nehmen diese Bezug genommen wird.
So $ foo ['c'] + +;
Dies ist so ein Beispiel, wo wir vorbei array2 als Argument
und es wird dann Modifizieren eines spezifischen Index des Arrays durch Inkrementieren.
Ich habe ehrlich gesagt keine Ahnung, was PHP ist zu tun.
Es kann einfach eine Kopie der gesamten Sache, aber wenn es smart,
es wird eine Kopie dieser Tasten, unter denen diese ihre unterschiedlichen Wert haben wird
dies kann jedoch noch auf das gleiche Array 1,2,3,4 hinweisen
und dies kann noch auf das gleiche Array weisen.
Ich werde iPad es.
Wir passieren in diesem Array, wo dieser Kerl Punkten bis 3, dieser Kerl Punkte [1,2,3,4],
dieser Kerl Punkte [34, ...]
Nun, da wir der Übergabe in die baz, sind wir ändern dies.
Wenn PHP ist intelligent, kann es einfach tun -
Wir hatten noch etwas Speicher kopieren, aber wenn es diese riesigen verschachtelten Untergruppen
brauchten wir nicht zu denen zu kopieren.
Ich weiß nicht, wenn es das ist, was sie tut, aber ich kann mir vorstellen, es zu tun.
Dies ist auch eine ziemlich große Vorteil von C über PHP.
>> PHP macht das Leben so viel einfacher für eine Menge Dinge,
aber Sie Art haben absolut keine Ahnung, wie gut es führt
denn ich habe keine Ahnung, unter der Haube, wenn es so ist diese Kopien von Dingen,
Oh, ist das werde eine konstante Zeit Kopie,
ist gerade dabei, ein Zeiger zu ändern, wird es zu einem lächerlich schwierige lineare Kopie sein?
Was, wenn es nicht Platz finden?
Ist es müssen dann Garbage Collection ausgeführt, um etwas mehr Platz zu bekommen?
Und die Garbage Collection kann beliebig lange dauern.
In C müssen Sie nicht über diese Dinge zu kümmern.
Jede einzelne Zeile, die Sie schreiben, können Sie ziemlich viel Grund zu, wie es geht zu erfüllen.
>> Werfen wir einen Blick zurück auf diese.
Wie schön ist es, dass Sie nicht haben, um mit Hash-Funktionen befassen,
verkettete Listen, oder so etwas?
Da das Arbeiten mit Hash-Tabellen ist so einfach, jetzt, hier ist ein spaßiges Puzzle zu arbeiten.
Öffnen Sie eine Datei namens unique.php und schreib ein PHP-Programm
(Auch als "script" bekannt).
Wir neigen dazu, sie nennen Skripten, wenn sie kurz Dinge, die Sie laufen auf der Kommandozeile sind.
Grundsätzlich kann jeder Sprache, die Sie nicht kompiliert, sondern du gehst, um die ausführbare Datei
auf der Kommandozeile, können Sie diese ausführbares Skript.
Ich könnte genauso gut schreiben ein C-Programm, das dies tut,
aber ich weiß nicht nennen es ein Skript, da ich kompilieren es zuerst und dann das binary.
Aber das PHP-Programm werden wir ein Skript aufrufen.
Oder wenn wir es geschrieben in Python oder Perl oder node.js oder einem von diesen Dingen,
würden wir nennen sie alle Skripte, weil du sie laufen in der Befehlszeile
aber wir wissen nicht kompilieren.
Wir könnten dies ziemlich schnell tun.
Wir sind nicht zu argv verwenden. Lasst uns einfach blasen durch diese.
Nennen Sie es einzigartig, ein Programm zu schreiben.
Man kann davon ausgehen, dass der Eingang wird ein Wort pro Zeile enthalten.
Tatsächlich wird argv ziemlich trivial zu bedienen.
unique.php.
Das allererste, wollen wir prüfen, ob wir bereits 1 Kommandozeilen-Argument übergeben haben.
Genauso, wie Sie argc und argv in C zu erwarten, haben wir noch die in PHP.
So if ($ argc! == 2) dann werde ich nicht mit dem Druck eine Nachricht oder irgendetwas zu tun.
Ich werde einfach zu verlassen, Fehlercode 1.
Ich könnte auch wieder ein.
Selten in PHP sind Sie in diesem Zustand, in dem wir uns befinden -
Normalerweise sind in einer Funktion durch eine Funktion durch eine Funktion von einer Funktion aufgerufen wird aufgerufen.
Und wenn etwas schief geht und Sie wollen einfach nur, um alles komplett zu verlassen,
Ausfahrt kurz das Programm beendet.
Dieser besteht auch in C.
Wenn Sie in einer Funktion in einer Funktion in einer Funktion in einer Funktion
und Sie wollen nur töten das Programm, können Sie exit ein und es wird nur verlassen.
Aber in PHP ist es noch selten, dass wir bei diesem Top-Niveau sind.
Normalerweise sind wir im Inneren eine Art von Funktion, so nennen wir exit
so dass wir nicht die Rückkehr bis 1, was das dann feststellt, gibt es eine Fehlermeldung
so dass die Renditen auf, wenn das erkennt es war ein Fehler.
Wir wollen nicht, um damit umzugehen, so zu beenden (1);
Rückkehr (1), in diesem Fall wäre äquivalent.
>> Dann, was wir öffnen möchten wir wollen fopen.
Die Argumente gehen zu sehen ziemlich ähnlich.
Wir wollen fopen ($ argv [1], und wir wollen es zum Lesen zu öffnen.
Das gibt eine Ressource, die wir f nennen sind.
Das sieht ziemlich ähnlich wie C tut es sei denn, wir müssen nicht FILE * sagen.
Stattdessen haben wir nur sagen, $ f. Okay.
Eigentlich denke ich, dieses gibt uns sogar einen Hinweis auf PHP-Funktion aufgerufen Datei. PHP-Datei.
Was dies tun wird, ist zu lesen eine ganze Datei in einem Array.
Sie brauchen noch nicht einmal zu fopen es. Es wird das für Sie tun.
So $ lines = file ($ argv [1]);
Jetzt alle Zeilen der Datei sind in den Zeilen. Jetzt wollen wir die Zeilen zu sortieren.
Wie können wir sortieren die Zeilen?
Wir sortieren die Zeilen.
Und jetzt können wir drucken oder was auch immer.
Wahrscheinlich ist der einfachste Weg foreach ($ lines wie $ line) echo $ line;
[Schüler] Würden wir nicht einmal in den Leitungen durch Verweis auf etwas in Art?
Dies ist, wo sort als Funktion sort (& $ array) definiert werden würde.
Wenn Sie die Funktion rufen Sie geben sie nicht Bezug genommen wird.
Es ist die Funktion, die es definiert als Einnahme als Referenz.
Das ist eigentlich genau das, was schief gelaufen ist
wenn wir setzen alles auf unseren Servern, wenn wir von 5,3 bis 5,4 gingen.
Bis 5,4, war dies durchaus sinnvoll.
Eine Funktion nicht erwarten, dass es als Referenz zu nehmen, aber man kann es als Verweis übergeben
so, wenn die Funktion nicht passieren, um es zu ändern, ist es immer noch geändert werden.
Wie von 5,4, du bist eigentlich nicht, dies zu tun.
So, jetzt der einzige Weg, vorbei Referenz ist, wenn die Funktion explizit tut es.
Wenn Sie nicht wollen, dass er ihn zu ändern, dann müssen Sie $ copy = $ lines und Pass zu kopieren.
So, jetzt Linien erhalten und Kopie verändert werden.
php.unique.php. Ich könnte etwas durcheinander haben.
Unexpected 'sort'.
Es geht um etwas, was dies für uns sein.
Es ist gar nicht da.
Beachten Sie, wenn Sie das Handbuch, dass das erste Argument wird erwartet, dass ein Array gelesen werden
und es ist durch Bezugnahme aufgenommen.
Warum wird diese Klagen zu mir? Weil ich diese Funktion sort immer noch hier, dass ich nicht wollen.
Okay, php.unique.php. Ich habe nicht passieren sie ein Argument, weil ich nicht über eine Datei.
Es ist php.unique.php auf test.php.
Hier ist test.php alle in einem schönen sortierter Reihenfolge gedruckt.
Beachten Sie, dass sortierter Reihenfolge irgendwie seltsam ist für eine Code-Datei
weil alle unsere Leerzeilen gehen, um an erster Stelle stehen
dann gehen alle unsere 1 Ebene Vertiefungen kommen
dann kommen alle unsere keine Vertiefungen.
Yeah. >> [Schüler] Also für den Quellcode wurde nicht per Referenz übergeben?
Ist das in der Regel durch Wert übergeben?
[Bowden] Wenn Sie eine Funktion aufrufen, es nie bestimmt, ob es durch Verweis übergeben wurde.
Es ist die Definition der Funktion, ob sie durch Verweis übergeben wurde bestimmt.
Und er blickte auf die Funktion Definition von Art oder einfach nur Lust auf diese,
es dauert das Argument als Verweis.
Also unabhängig davon, ob Sie es wollen sie durch Verweis zu nehmen, es dauert es von Referenz.
Es ändert das Array an Ort und Stelle.
Dies ist nur nicht erlaubt. Sie sind nicht erlaubt, dies zu tun. >> [Schüler] Oh, okay.
[Bowden] Dies ist eine Art gehen, um Linien durch Bezugnahme zu nehmen und zu modifizieren.
Und wieder, wenn Sie nicht wollen, dass es das zu tun, können Sie eine Kopie der sort.
Selbst in diesem Fall ist nicht eigentlich eine Kopie Kopie Linien.
Es verweist nur auf die gleiche Sache, bis es erste modifizierte wird,
wo es zuerst zu in der Art-Funktion geändert zu werden,
wo, denn es ist copy-on-write, jetzt eine Kopie der Kopie wird gemacht werden.
Sie können dies auch tun. Das ist die andere Ort, den Sie kaufmännisches sehen können.
Sie sehen es in foreach-Schleifen finden Sie es in der Funktion Erklärungen,
und du siehst es, wenn nur die Zuordnung Variablen.
Jetzt haben wir nichts, indem Sie dies erreicht
weil kopieren und Linien sind buchstäblich die gleiche Sache.
Sie können Linien und kopieren austauschbar.
Sie können unset ($ copy), und dass nicht unset Linien,
einfach nur verlieren Ihr Verweis auf die gleiche Sache.
So wie dieser Punkt jetzt Linien ist der einzige Weg, Linien zugreifen können.
>> Haben Sie Fragen?
Yeah.
[Schüler] Völlig off topic, aber Sie müssen nicht PHP mit der Nähe - >> Du nicht.
Okay.
[Bowden] Ich würde sogar so weit gehen, zu sagen, es ist eine schlechte Praxis, um sie zu schließen.
Das ist wohl eine Übertreibung, vor allem in einem Skript
aber mal sehen, was passiert, wenn ich das tue.
Das tat nichts. Was ist, wenn ich wollte - [seufzt]
Ich muss ein Argument übergeben.
Schießen. Ich nannte es falsch.
So php.unique.php mit einem Argument.
Nun weiß ich auch nicht brauchen.
Ich werde geben sie ein gültiges Argument.
Dieses gedruckte was es Druck ist.
Ich Druckvorlagen und Kopie existiert nicht. So Linien.
Es bedruckt alles, und dann feststellen, all diese Junk hier unten,
denn in PHP alles, was außerhalb des PHP-Tags
ist gerade dabei, buchstäblich gedruckt werden.
Das ist, warum HTML, es ist so schön, dass ich div blah, blah, blah Klasse oder was auch immer zu tun,
blah, blah, blah und dann einige PHP-Code und dann Ende div.
Und jetzt Bedrucken diese bekomme ich meine schöne div up top, alles, was PHP gedruckten, div unten.
Katastrophale, wenn so etwas passiert, ist das ziemlich häufig,
nur eine streunende newline an der Unterseite der Datei.
Sie würden nicht glauben würde, dass große Sache sein,
bis Sie die Tatsache, dass mit Browsern -
>> Wie leitet der Arbeit oder im Grunde jede headers Arbeit,
wenn Sie Ihre Verbindung zu einer Website und sendet es zurück all diese Header und Dinge
ähnliche Reaktion 200 oder Antwort umleiten oder was auch immer,
Header sind nur bis zum ersten Byte Daten gesendet werden.
Sie umleiten können tausende Male, aber sobald das erste Byte der Daten gesendet werden
Sie soll nicht wieder umzuleiten.
>> Wenn Sie eine streunende Zeilenumbruch am Ende einer Datei
und lassen Sie uns sagen, dass Sie diese Funktion verwenden und dann wollen Sie -
Sagen wir, es ist eine andere Datei, die index.php ist und Sie require_once etwas -
Ich kann nicht mit gutem Beispiel voran zu denken.
Das Problem tritt auf, wenn diese Zeile am unteren Rand wird wiederholt.
Sie wollen nicht etwas aufgegriffen worden noch.
Auch wenn Sie nicht auf alles immer wider die Absicht gehabt habe, hat etwas hallte bekommen
und so jetzt bist du eigentlich nicht mehr headers senden
und du wirst die Beschwerden zu bekommen.
Sie wissen einfach nicht brauchen diese schließenden Tags.
Wenn Sie planen, etwas zu tun mit HTML -
und es ist durchaus sinnvoll zu tun hier unten div unabhängig
und dann an dieser Stelle können Sie oder können Sie nicht schließen sie.
Es spielt eigentlich keine Rolle.
Aber in PHP-Skripten ist es selten, um es zu schließen.
Wenn alles PHP, absolut alles,
Sie nicht wirklich brauchen, um es zu schließen / sollte man nicht schließen.
>> Umgang mit Strings ist viel schöner als in C.
In PHP können Sie einen String mit einfachen oder doppelten Anführungszeichen.
Mit einfachen Anführungszeichen können Sie nicht "Flucht"-Sequenzen.
Ständig entkommen, blah, blah, blah.
So printf ist sehr selten in PHP.
Ich glaube, ich würde printf verwenden, wenn ich eine Art von Dingen tun wollte - in pset 5 Sie verwendet sprintf oder was auch immer.
Aber Sie wollen 001.jpg und 002.jpg tun.
Also für diese Art von Dingen, wo ich wirklich wollen, um den Text I printf verwenden würden formatieren.
Aber ansonsten würde ich einfach die String-Verkettung.
Ich habe nie wirklich printf verwenden.
Wir stehen noch die Differenzierung der Details zwischen einfachen Anführungszeichen und doppelten Anführungszeichen.
Der größte Unterschied ist, dass einfache Anführungszeichen, es wörtlich gedruckt werden.
Es gibt keine char Datentyp in PHP, im Gegensatz zu C, so ist dies äquivalent dazu.
Sie sind beide Strings.
Und das Schöne daran Apostroph Strings ist, ich könnte sagen 'Hallo Welt!' blah, blah, blah,
$ $ Wooo.
Was passiert, wenn drucke ich dies wird es buchstäblich zu drucken.
Lasst uns loszuwerden all unsere Sachen.
So echo $ str1;
Es ist buchstäblich all diese Dinge gedruckt: Dollarzeichen,
backslash n, die Sie denken würden Zeilenumbrüche wäre -
all diese Dinge, die es gibt buchstäblich.
Das einzige, was Sie brauchen, um zu entkommen sind einfache Anführungszeichen
weil es sonst denke, es schließt die einfachen Anführungszeichen.
Doppelte Anführungszeichen, völlig anders.
Wir sehen bereits die Syntax-Highlighting ist cluing uns auf zu dem, was im Begriff zu gehen schrecklich falsch.
php.unique. Undefined variable: wooo, weil dies als eine Variable namens wooo interpretiert.
Doppelte Anführungszeichen können Sie Variablen einfügen in -
Lassen Sie uns sagen $ name = "Rob";
So echo "Hallo, mein Name $ ist der Name!";
Es erkennt dies als eine Variable.
Als ich das laufen - und ich werde einen Zeilenumbruch einfügen - Hallo, mein Name ist Rob! und hallo Welt!
Dies liegt daran, entfernte ich nie den Druck von wooo oben.
Es gibt 1 weiteren Schritt können Sie tun.
$ Array = [1, 2, 3];
Was, wenn ich den ersten Index des Arrays drucken?
Sie tun $ array [0].
Die Syntax-Highlighting ist ein Anhaltspunkt. Was wird das wohl tun?
php.unique.
Hallo, mein Name ist 1! das ist nicht das, was ich wollte.
Syntax-Highlighting hat mich angelogen.
Lassen Sie uns versuchen "A" -> 1, 'b' -> 2.
Das ist, wie ich hätte es zu schreiben.
Unexpected Apostroph (T_ENCAPSED blah, blah, blah, blah, blah).
Die Idee ist, dass es nicht erkennt dies als Teil des Arrays.
Es ist nicht zu erkennen dies als Array Buchstabe a indiziert.
Sie wollen, dass von geschweiften Klammern umgeben zu tun,
und jetzt, was in dieser geschweiften Klammern werden interpoliert,
das ist das Wort, das wir für magisch Einsetzen dieser Variablen in den richtigen Stellen.
Nun, dies zu tun, php.unique und Hallo, mein Name ist 1! erwartungsgemäß
oder Hallo, mein Name ist Rob!
Eine Sache, die ganz nett zu einfachen Anführungszeichen ist, dass -
Es gibt einige Kosten zu interpolieren.
Wenn Sie Anführungszeichen verwenden, hat der Dolmetscher gehen über diese Zeichenfolge,
dafür sorgen, dass, "Oh, hier eine Variable ist. Jetzt habe ich zu holen, dass variable und legen Sie sie hier brauchen."
Auch wenn Sie nicht alle Variablen,
nichts in dieser doppelten Anführungszeichen muss interpoliert werden,
aber es wird noch langsamer sein, weil sie gehen über die doppelte Anführungszeichen muss
Suche nach Dingen, die interpoliert werden müssen.
So einfache Anführungszeichen kann ein wenig schneller, wenn nichts zu interpoliert werden,
und ich neige zu bedienen, auch einfache Anführungszeichen für "Hallo, mein Name ist '. $ Array ['a'] sowieso.
Das wird als äquivalent zu dem, was wir vorher hatten.
Aber es ist eine Frage des Geschmacks.
Wenn Sie mit PHP, haben Sie wahrscheinlich nicht über die Geschwindigkeit Unterschied zu kümmern.
Es ist nicht genug, um sie durchdenken zu beginnen.
>> Irgendwelche letzten Fragen?
>> Wir hatten eigentlich nicht selbst durch alle von ihm zu bekommen, aber dieses Zeug war langweilig.
Das letzte, was ganz nett ist in PHP ist, wenn man mit HTML zu tun haben,
Sie verwenden es ein bisschen, so die nette Abkürzung Syntax zum Drucken eine Variable.
Ohne dass PHP hier, wird dies als Short-Tags.
Offiziell als von PHP 5.4, ist diese veraltet.
Es wird empfohlen, php setzen.
Dies wird noch unterstützt, so kurz Tags mit dem <? = Noch völlig in Ordnung.
Es ist standardmäßig unterstützt, so können Sie diese verwenden, wie Sie wollen, und sie sind sehr praktisch.
>> Haben Sie Fragen?
Gut.
>> Bleiben Sie stilvoll, San Diego.
[Lacht]
Bye. [Lacht]
[Applaus] [lacht]
>> [CS50.TV]