[Powered by Google Translate] [Artikel 8 - meer gemaklik]
[Rob Bowden - Harvard Universiteit]
[Hierdie is CS50. - CS50.TV]
>> Hierdie week artikel notas gaan redelik kort,
so ek gaan net te hou praat, julle gaan te hou om vrae te vra,
en ons sal probeer om in te vul soveel tyd as moontlik.
Baie mense dink dat hierdie pset nie noodwendig moeilik, maar dit is baie lank.
Die pset spec self 'n uur neem om te lees.
Ons gee jou 'n baie van die SQL jy moontlik nodig het om te gebruik.
Ons loop jy deur middel van 'n baie, so moet dit nie te sleg nie.
Het iemand begin of voltooi?
Dit is die laaste pset. O, my God.
Gewoonlik is daar 'n JavaScript-een na hierdie, maar kalender dinge te verander
maak alles 1 week korter, en ons het nie meer 'n JavaScript pset.
Ek weet nie hoe dit affekteer of JavaScript gaan verskyn op die eksamen
of Quiz 1.
Ek dink dit sal iets wees soos wat jy nodig het om hoë-vlak dinge om te weet oor JavaScript,
maar ek twyfel of ons net sal gee jou 'n reguit JavaScript-kode
want jy het nie 'n pset in dit.
Maar dit sal goed vir quiz review volgende week.
>> Afdeling van die vrae.
'N baie van hierdie dinge is 'n bietjie swak bewoord, maar ons sal Bespreek waarom.
In teenstelling met C, PHP is 'n dinamies-getikte "taal. Wat beteken dit, vra jy?
Wel, sê totsiens aan al diegene char, vlot, int, en ander sleutelwoorde wat jy nodig het om te gebruik
wanneer verklaar veranderlikes en funksies in C.
In PHP, is 'n veranderlike se tipe bepaal deur die waarde wat dit tans hou.
So voordat ons tik die kode in 'n lêer genaamd dynamic.php,
PHP is dinamies getik. Dit is waar.
Ek het nie eens met die feit dat dit beteken dat ons totsiens sê nie char, float, int,
en ander sleutelwoorde.
Die presiese verskil tussen dinamiese getik en die alternatief,
wat staties getik, is dat dinamiese getik, al van jou tipe kontrole en stuff
gebeur te hardloop tyd, terwyl staties getik dit gebeur tydens kompilering gekies nie.
Die woord staties in die algemeen lyk kompilering dinge te beteken.
Ek dink daar is ander gebruike vir dit, maar in C wanneer jy 'n statiese veranderlike verklaar,
die berging daarvan word toegeken tydens kompilering gekies nie.
Hier, dinamiese getik beteken net dat -
In C as jy probeer om 'n string en 'n heelgetal te voeg, wanneer jy dit stel,
dit gaan om te kla nie, want dit gaan om te sê dat jy nie kan voeg 'n int en 'n wyser.
Dit is net nie 'n geldige operasie.
Dit is 'n ander ding wat ons sal kry om in 'n tweede.
Maar daardie soort van kontrole, die feit dat dit kla tydens kompilering gekies nie,
statiese tipe kontrole.
Daar is tale af, waar jy hoef nie char, vlot, int om te sê, en al daardie dinge,
maar die taal kan vertel van die konteks van die saak watter tipe dit veronderstel is om te wees,
maar dit is nog staties getik.
So as jy 51, OCaml, hoef jy nie enige van hierdie tipes te gebruik,
maar dit sal nog tydens kompilering gekies nie sê jy kan dit nie doen omdat jy 'n int en 'n string gemeng word.
Dinamiese getik beteken net dat jy gaan iewers tydens looptyd 'n klagte in te kry.
As jy ook gebruik Java voor, in die algemeen, byna 'n C-tipe taal
gaan word staties getik, C, C + +, Java, al die algemeen staties getik.
In Java wanneer jy stel iets en jy sê
string s is gelyk aan 'n nuwe iets is wat nie 'n string,
wat gaan om te kla omdat die tipes net stem nie ooreen nie.
Dit gaan tydens kompilering gekies nie om te kla.
Maar dit het ook 'n paar dinamiese dinge soos as jy probeer om iets te gooi
tot 'n tipe wat is meer spesifiek as die huidige tipe,
daar is niks wat dit kan doen om seker te maak tydens kompilering gekies nie of dat die cast is gaan om te slaag.
Java het ook 'n paar dinamiese tipe seker te maak dat sodra dit aan dat die lyn van die kode
wanneer dit eintlik die uitvoering, gaan dit die cast om te doen,
kyk of dat cast geldig was in die eerste plek,
en as dit nie was, dan is dit gaan om te kla dat jy het 'n ongeldig type.
Dynamic tipe kontrole.
Tik dit in 'n lêer genaamd dynamic.php.
Dynamic.php.
Ek sal Pak dat formatering.
Ons het 'n veranderlike, ons stel dit vir die heeltallige 7,
dan moet ons gaan om dit te druk en% s -
O, ons die tipe van druk, is so getSoort gaan om terug te keer van die tipe van die veranderlike.
Ons is net die druk van die tipe oor en oor weer.
Ons het net php.dynamic.php.
Ons sal sien dat dit veranderinge van heelgetal string te Boolean as ons gaan deur.
In C is daar geen Boole data tipe, is daar geen string data tipe.
Daar is char * en Boolese net geneig om te wees int of char of iets.
In PHP hierdie tipes bestaan ​​nie, en dit is een van die groot voordele van PHP oor C -
dat die string bedrywighede is oneindig makliker in PHP as C. Hulle het net werk.
>> So kom ons terug hier.
Ons hardloop dynamic.php.
Dit vertel die PHP-interpreter, genaamd php, die PHP-kode uit te voer in die dynamic.php.
Indien u enige foute in die lêer, sal die tolk vertel nie!
Die tolk, dit is 'n ander groot verskil tussen PHP en C.
In C wat jy het om iets op te stel en dan moet jy wat saamgestel lêer uitgevoer.
In PHP jy nooit enigiets stel.
So het die PHP-interpreter is net basies die lees van hierdie lyn deur die lyn.
Dit tref var = 7 dit treffers printf dan is dit treffers var dan is dit treffers printf en so aan.
Daar is 'n bietjie van die opstel van wat dit doen, en dit slaan die resultate
so as jy die script loop later jy kan doen,
maar dit is basies 'n lyn deur die lyn soort van ding.
Dit beteken dat 'n baie van die optimalisaties wat ons kry in C,
soos die opstel, dit is net die vertaler in die algemeen kan 'n baie truuks vir jou doen.
Dit kan ongebruikte veranderlikes, kan dit doen al hierdie soort van dinge,
dit kan doen Staartrecursie.
In PHP jy gaan nie daardie voordeel te kry
omdat dit net gaan om te begin met die uitvoering van lyn deur die lyn deur die lyn,
en dit nie regtig nie herken nie hierdie dinge so maklik
want dit is nie 1 groot samestelling slaag oor die ding en dan die uitvoering;
dit is net reël vir reël.
So dit is die tolk.
>> Terug na ons dinamiese tik: pretty cool, eh?
Jy kan beslis nie doen nie in C!
Nou, kyk of jy kan uitvind die aard van elk van die volgende waardes.
Sien hierdie vir verwysing.
So 3,50. Watter tipe dink jy dat gaan wees?
Hier is die tipes wat ons het.
Ons het bools, heelgetalle, swaai punte, snare, skikkings, voorwerpe,
en dan is die hulpbronne, wat is 'n soort van vae.
Ek dink daar is eintlik 'n voorbeeld hier.
Dan is daar null. NULL is 'n spesiale tipe.
In teenstelling met C waar NULL is net 'n wyser met adres 0,
in PHP, NULL is sy eie soort waar die enigste geldige ding van daardie soort is NULL.
Dit is baie meer nuttig is vir foutopsporing.
In C waar ons hierdie kwessie waar as jy teruggaan NULL het,
beteken dit dat jy 'n NULL wyser jy terugkeer of die gebruik van NULL fout om aan te dui
of al van daardie verwarring ons het op 'n punt.
Hier, terugkeer NULL beteken oor die algemeen fout.
Ook 'n baie van die dinge wat return false vir foute.
Maar die punt is die NULL soort, die enigste ding van die NULL tipe is NULL.
Dan callback soos jy 'n anonieme funksies kan definieer.
Jy hoef nie die funksie 'n naam gee nie, maar jy sal nie te doen het met wat hier.
Op soek na die tipes wat hulle nie verwag dat ons om te weet,
wat dink jy die tipe van 3,50 is? >> [Student] Float.
Ja.
So, hier is wat jy dink die tipe van hierdie is? >> [Student] Array.
Ja. Die eerste een was vlot, die tweede een is 'n skikking.
Let daarop dat hierdie skikking is nie soos 'n C-skikking
waar jy indeks 0 het n bietjie waarde, indeks 1 het 'n paar waarde.
Hier is die indekse is a, b, en c is en die waardes 1, 2 en 3.
In PHP daar is geen verskil tussen 'n associatieve array en net 'n gereelde verskeidenheid
as jy sou dink dat dit in C.
Daar is net dit, en onder die enjinkap is 'n gereelde skikking is net 'n associatieve array
waar 0 kaarte op dieselfde manier tot 'n waarde van 'n kaarte tot 'n waarde.
PHP Om hierdie rede, kan baie sleg wees vir baie vinnig kode / benchmarking dinge
want in C wanneer jy met behulp van 'n skikking jy weet dat die toegang tot 'n lid is konstant tyd.
In PHP toegang tot 'n lid is wie weet hoeveel tyd?
Dit is waarskynlik konstant as dit hashes korrek.
Wie weet wat dit regtig doen onder die enjinkap?
Jy werklik nodig het om te kyk na die implementering om te sien hoe dit gaan om te gaan met dit.
So dan fopen.
Ek dink hier laat ons net PHP handleiding fopen om te kyk na die terugkeer tipe.
Ons sien hier kan jy kyk op pretty much enige funksie in die PHP handleiding
en dit is 'n soort van die man-bladsy van PHP.
Die opbrengs soort gaan wees hulpbron.
Dit is waarom ek kyk dit nie, want ons het nie regtig hulpbron definieer.
Die idee van die hulpbron, in C wat jy soort van het 'n lêer * of wat ookal;
in PHP is die hulpbron is jou lêer *.
Dit is wat jy gaan lees van, dit is wat jy gaan skryf.
Dit is gewoonlik eksterne, so dit is 'n hulpbron wat jy kan trek dinge uit en gooi dinge te.
En uiteindelik, wat is die tipe van NULL? >> [Student] null.
Ja. Dus is die enigste ding wat is NULL is NULL.
NULL is NULL.
>> Een kenmerk van PHP se tipe stelsel (vir 'n beter of vir slegter) is sy vermoë te jongleren tipes.
Wanneer jy 'n lyn van PHP-kode wat kombineer die waardes van verskillende tipes,
PHP sal probeer om die verstandige ding om te doen.
Probeer om uit elk van die volgende reëls van die PHP-kode. Wat uitgedruk?
Is dit wat jy verwag? Hoekom of hoekom nie?
Hierdie feit oor PHP is wat dit maak wat ons noem swak getikte.
Swak getik en sterk getik,
daar is verskillende gebruike vir daardie terme,
maar die meeste mense gebruik swak getik en sterk getik hierdie soort van ding te beteken
waar ("1" + 2), wat werk.
In C wat nie wil werk nie.
Jy kan dink dit nie werk nie.
Baie mense meng dinamiese tik en swak tik en statiese tik en sterk tik.
Python is 'n ander voorbeeld van 'n taal wat dinamies getik.
Jy kan gooi rondom tipes in veranderlikes en dit gaan om te hardloop tyd te bepaal
enige fout kontrole,.
In Python dit gaan om dit uit te voer en dit sal sien ("1" + 2);
en dit sal misluk omdat dit sê dat jy nie kan voeg 'n string en 'n heelgetal.
In PHP, wat net so dinamies getik, sal dit nie misluk.
Swak tik het te doen met die feit dat dit nie dinge met tipes
wat nie regtig sin maak nie noodwendig nie.
So ("1" + 2) Ek kan my voorstel dat die tou 12, Ek kan my voorstel dat dit die tou 3,
Ek kan my voorstel dat dit die heelgetal 3.
Dit is nie noodwendig goed gedefinieer, en ons is waarskynlik gaan om te hier te sien
dat wanneer ons druk ("1" + 2); dit is waarskynlik gaan om te eindig om anders te wees
as die druk (1 + "2").
En dit is geneig om te wees, in my mening, vir die erger.
Hier kan ons probeer om hierdie.
Nog 'n bietjie truuk oor PHP is jy nie nodig het om werklik te skryf van die lêer.
Dit maak die uitvoering van hierdie opdrag modus.
So php-r, dan kan ons gooi in die opdrag hier:
"Druk ('1 '+ 2)," en ek sal gooi 'n nuwe reël.
Hierdie gedrukte 3.
Dit lyk asof dit druk 3 en dit is die heelgetal 3.
So nou, laat ons probeer om die ander manier om:
"Print (1 + '2 ');
Ons kry 3, en is dit ook gaan wees integer 3? Ek het eerlik het geen idee nie.
Dit lyk soos wat in ooreenstemming is.
Daar is nooit 'n kans van dit wat die tou 12 of enigiets soos daardie
omdat PHP, in teenstelling met JavaScript en Java,
het 'n aparte operateur vir aaneenskakellling.
Aaneenskakellling in PHP is dot.
So druk (1 '2 '.); Gaan ons te gee 12.
Dit is geneig om te lei tot verwarring waar mense probeer om iets te doen soos str + =
'n ander ding wat hulle wil toe te voeg aan die einde van hul string, en dit is gaan om te misluk.
Jy nodig het om str =
Dus vergeet nie aaneenskakellling in PHP is 'n punt.
Ander dinge om te probeer druk ("CS" + 50);
Ek het vir julle gesê dat daar is geen hoop van hierdie in CS50
sedert aaneenskakellling is nie +.
Wat dink jy dit gaan uiteindelik 'n?
Ek het eerlik het absoluut geen idee.
Dit lyk asof dit is net 50.
Dit sien die string, en ek wed as ons 123CS -
Dit sien die eerste string, probeer dit 'n heelgetal van dit of 'n aantal van dit te lees.
In hierdie geval is dit sien 123CS.
"Dit maak nie sin as 'n heelgetal, so ek is net gaan om te dink van die 123."
So 123 + 50 gaan word 173.
En hier is dit begin lees van hierdie as 'n heelgetal.
Dit nie sien nie, sodat dit net behandel dit as 0. So 0 + 50 gaan wees 50.
Hierdie Ek neem gaan om iets soortgelyks te doen.
Ek dink 99.
Ja, want dit gaan om die eerste te neem -
So 99.
Hier (10/7), indien dit was C, sou wat weer terugkom nie?
[Student] 1. >> Ja, sou dit wees 1 omdat 10/7 verdeling van 2 heelgetalle.
'N heelgetal gedeel deur 'n heelgetal gaan om terug te keer van 'n heelgetal.
Dit kan nie terugkeer nie 1 punt wat dit ook al sal wees, so dit is net gaan om terug te keer 1.
Hier druk (10/7), dit gaan eintlik interpreteer dat.
En dit beteken dat as jy eintlik wil integer afronding en dinge om te doen soos dit,
wat jy nodig het druk (vloer (10/7)) te doen;
In C is dit waarskynlik vreemd dat jy kan staatmaak op 'n heelgetal Afbrekingen gereeld,
maar in PHP jy kan nie, want dit sal outomaties draai dit in 'n float.
En dan is (7 + ware), wat doen jy dink dit gaan wees?
Ek vermoed 8 as dit gaan te interpreteer as 1.
Dit lyk soos dit is 8.
>> So enigiets wat ons gedoen het in die afgelope 10 minute moet jy absoluut nooit doen nie.
Jy sal sien kode wat dit doen.
Dit hoef nie so eenvoudig wees soos hierdie.
Jy kan 2 veranderlikes, en 1 veranderlike gebeur na 'n string te wees
en die ander veranderlike gebeur na 'n int te wees, en dan sal jy hierdie veranderlikes byvoeg saam.
Aangesien PHP is dinamies getik en dit sal nie doen enige tipe kontrole vir jou
en aangesien dit swak getik en aangesien dit sal outomaties net gooi hierdie dinge saam
en alles sal net werk, is dit moeilik om selfs te weet dat hierdie veranderlike moet 'n string wees,
so ek moet nie voeg dit by hierdie veranderlike wat 'n heelgetal is.
Beste praktyk is as 'n veranderlike is 'n string, hou dit vir ewig as 'n string.
As 'n veranderlike is 'n int, hou dit vir ewig as 'n int.
As jy wil om te gaan met heelgetalle en snare,
jy kan gebruik om varsint - dis JavaScript.
Intval. Ek doen dit al die tyd. PHP en JavaScript ek meng alles.
So intval gaan om terug te keer van die heelgetal waarde van 'n veranderlike.
As ons slaag in die "print (intval ('123")), jy kry 123.
Intval self is nie van plan om die tjek vir ons dat dit uitsluitlik is 'n heelgetal te doen.
Die PHP-handleiding, daar is net so baie funksies wat beskikbaar is,
so hier is ek dink wat ek sou gebruik is is_numeric 1.
Ek vermoed dat teruggekeer vals.
Dit is 'n ander ding wat ons het om te gaan oor is ===.
So is_numeric ('123df "), sou jy nie dink van wat as is_numeric.
In C wat jy wil hê om oor al die karakters te itereer
en kyk om te sien as elke karakter syfer of wat ook al is.
Hier is_numeric gaan om dit te doen vir ons,
en dit is die terugkeer vals.
So wanneer ek gedruk, dit druk niks, so hier is ek vergelyk om dit te sien,
Het jy gebeur vals te wees? En so is dit nou se druk 1.
Blykbaar is dit druk 1 as ware in plaas van die druk van waar as die waarheid.
Ek wonder as ek dit doen print_r. Nee, is dit nie nog steeds 1.
>> Terug te gaan na === == bestaan ​​nog steeds,
en as jy praat met Tommy hy sal sê == is heeltemal fyn.
Ek gaan om te sê dat == is verskriklik en jy moet nooit gebruik ==.
Die verskil is dat == vergelyk dinge
waar dit kan waar wees, selfs indien hulle is nie dieselfde soort,
terwyl === vergelyk dinge en dit eerste tjeks is hulle dieselfde soort?
Ja. Okay, nou gaan ek om te sien of hulle werklik te vergelyk om gelyk te wees.
Jy kry weird dinge soos 10 is gelyk aan - Kom ons kyk wat sê.
So ('10 '== '1 e1);
Dit terugkeer waar.
Is daar iemand enige raaiskote waarom dit terug waar?
Dit is nie net oor dat. Miskien is dit 'n wenk.
Maar as ek dat 'n f - darn dit! Ek hou met behulp van dubbele aanhalingstekens.
Die rede waarom die dubbele aanhalingstekens skree op my omdat ek dit in dubbele aanhalingstekens.
So ek kon die dubbele aanhalingstekens hier ontsnap, maar aanhalingstekens maak dit makliker.
So ('10 '== '1 f1 "); nie druk waar. ('10 '== '1 E1); druk waar.
[Student] Is dit hex? >> Dit is nie blok is, maar dit is naby dat dit is soos -
1e1, wetenskaplike notasie.
Dit erken 1e1 as 1 * 10 ^ 1 of wat ookal.
Dit is gelyk heelgetalle.
As ons dit doen === dan is dit gaan vals te wees.
Ek het eintlik het geen idee as ons dit doen == wat oor (10 en '10abc '); Alles reg. So dis waar.
Sodat net soos wanneer jy gedoen het (10 + '10abc '); en dit sal 20,
hier (10 == '10abc "), is waar.
Nog erger is dinge soos (valse == null); is waar
of (valse == 0), waar is, (valse == []);
Daar is weird gevalle van - Dit is een van daai weird gevalle.
Let op dat (valse == []); waar is.
('0 '== False), is waar.
('0 '== []); Vals is.
So == is in geen manier oorganklike.
kan wees gelyk aan b en 'n kan wees gelyk aan c,
maar B kan nie gelyk aan c.
Dit is 'n gruwel is dit vir my, en jy moet altyd gebruik ===.
[Student] Kan ons doen == sowel? >> [Bowden] Ja.
Die ekwivalent sou wees! = En ==!
Dit is eintlik opgevoed in die pset spec
waar 'n baie funksies terugkeer -
Die PHP-handleiding is goed hieroor.
Dit plaas in 'n groot rooi boks, "Hierdie vals sal terugkeer indien daar is 'n fout."
Maar terugkeer 0 is 'n heeltemal redelike ding om terug te keer.
Dink oor enige funksie wat na verwagting 'n heelgetal is om terug te keer.
Kom ons sê dat hierdie funksie is veronderstel om die aantal lyne te tel in 'n lêer of iets.
Onder normale omstandighede, jy slaag hierdie funksie 'n lêer
en dit gaan 'n heelgetal wat verteenwoordig die aantal lyne om terug te keer.
So 0 is 'n heeltemal redelike aantal as die lêer is net leeg.
Maar wat as jy slaag, dit 'n ongeldige lêer en die funksie gebeur om terug te keer vals
as jy slaag dit 'n ongeldige lêer?
As jy net doen == jy nie die onderskeid van die saak tussen ongeldig lêer en leë lêer.
Altyd gebruik ===.
Dit is al daardie.
>> In PHP, die skikking tipe is anders as wat jy gebruik om in C.
Inderdaad, kan jy reeds opgemerk bogenoemde wanneer jy sien dat dit is van tipe skikking.
Die bracket syntax van PHP 5,4, wat is die nuutste weergawe van PHP is 'n nuwe.
Voor dit wat jy het altyd skikking te skryf ('a' -> 1, 'b' -> 2.
Dit was die constructor vir 'n skikking.
PHP het nou aangebreek om na die mooi sintaksis van net vierkantige hakies,
wat net soveel beter as skikking.
Maar die oorweging van PHP 5,4 is die nuutste weergawe,
jy mag teëkom plekke wat nie eens PHP 5,3.
Gedurende die somer het ons in hierdie kwessie gehardloop waar PHP 5,3 was wat ons gehad het op die toestel,
maar die bediener dat ons ontplooi al ons graad boek en stuur en al daardie dinge te
was PHP 5,4.
Dit nie te weet, het ons ontwikkel in 5,3, gestoot tot 5,4,
en nou al van 'n skielike geeneen van ons kode werk
want daar gebeur te gewees het veranderinge tussen 5,3 en 5,4
wat nie backwards compatible,
en ons het om te gaan en al van ons dinge wat nie werk nie vir PHP 5,4 los.
Vir hierdie klas, aangesien die toestel PHP 5,4,
dit is heeltemal fyn tussen vierkantige hakies te gebruik.
Maar as jy op soek is na dinge rondom die Internet,
as jy op soek is na 'n soort van verskeidenheid dinge, jy waarskynlik gaan om te sien
die spel uit array constructor sintaksis, want dit is al sedert PHP gebore
en vierkantige hakie sintaksis rond vir die afgelope paar maande
of wanneer 5,4 kom rond.
Dit is hoe jy die werf.
Net soos in C hoe jy sou indeks deur vierkantige hakies soos $ array [0], $ array [1], $ array [2],
jy indeks op dieselfde manier as jy gebeur om jou indekse snare.
So $ array ['n '] en $ array [' b '.
$ Array [b]. Hoekom sou dit verkeerd wees?
Dit sal waarskynlik 'n waarskuwing genereer, maar nog steeds werk. PHP is geneig om dit te doen.
Dit is geneig om net, "Ek gaan om jou te waarsku oor hierdie, maar ek is net gaan om voort te gaan
"En doen wat ek kan."
Dit sal waarskynlik vertaal dit na 'n string,
maar dit is moontlik dat op 'n sekere punt in die verlede iemand sê
definieer b te wees "Hello World".
So nou kan b 'n konstante en $ skikking [b] sal eintlik doen 'Hallo wêreld ".
Ek dink op hierdie punt, of ten minste ons PHP instellings,
as jy probeer om die werf in 'n skikking en dat die sleutel nie bestaan ​​nie, sal dit misluk.
Ek dink nie dit sal net jou waarsku.
Of ten minste kan jy dit so gestel dat dit nie net julle waarsku, is dit net reguit versuim up.
>> Isset is die manier waarop jy kyk om te sien of daar is eintlik so 'n indeks.
So isset ($ array ["hello world ']) sal terugkeer vals.
isset ($ array ['b']) sal terugkeer waar.
Jy kan meng hierdie syntaxes.
Ek is redelik seker wat hierdie skikking sou uiteindelik 'is - Ons kan toets dit uit.
O, ek moet PHPWord.
Dit is die vermenging van die sintaksis waar jy spesifiseer wat die sleutel is
en jy spesifiseer nie wat die sleutel is.
So 3 reg hier is 'n waarde.
Jy het nie uitdruklik gesê wat sy sleutel gaan wees.
Wat dink jy die sleutel gaan wees?
[Student] 0. >> Ek vermoed 0 net omdat dit is die eerste een wat ons het nie gespesifiseer nie.
Ons kan eintlik doen 'n paar van hierdie gevalle.
So is print_r druk rekursiewe. Dit sal druk die hele skikking.
Dit sal druk subarrays van die skikking of daar enige.
So print_r ($ skikking); php.test.php.
Dit lyk soos dit het dit 0.
Daar is eintlik iets om in gedagte te hou hier, maar ons sal terug te kry om dit in 'n tweede.
Maar wat as ek toevallig hierdie indeks 1 te maak?
PHP nie onderskei tussen string indekse en heeltallige indekse,
so op hierdie punt het ek nou net 'n indeks 1 gedefinieer en ek kan beide $ array [1] en $ array ['1 '] doen
en dit sal die dieselfde indeks en die dieselfde sleutel.
So nou wat dink jy 3 gaan wees? >> [Student] 2. >> [Bowden] Ek vermoed 2.
Ja. Dit is 2.
Wat gebeur as ons het is dit 10, dit is 4? Wat dink jy van die indeks van 3 gaan wees?
Ek dink 11.
My raaiskoot as wat PHP doen - en ek dink ek dit voorheen gesien het nie -
dit hou net dop van wat die hoogste numeriese indeks wat dit tot dusver gebruik is.
Dit is nooit gaan 'n string-indeks te ken aan 3. Dit sal altyd 'n numeriese indeks.
So dit hou spoor van die hoogste dis so ver opgedra, wat gebeur te wees 10,
en dit gaan 11 te gee aan 3.
Wat ek vantevore gesê het, let op die manier waarop dit is die druk van hierdie verskeidenheid.
Dit druk die sleutel 10, sleutel 4, sleutel 11, sleutel d.
Of selfs laat ons dit doen -
Ek dink ek het nie 'n 0, maar dit is druk 1, 2, 3, 4.
Wat as ek hier oorskakel? Of laat ons eintlik skakel hierdie 2.
Nou is dit druk 2, 1, 3, 4.
PHP se skikkings is nie net soos jou gereelde hash tafel.
Dit is heeltemal redelik om te dink van hulle as hash tabelle 99% van die tyd.
Maar in jou hash tabelle is daar geen sin van die volgorde waarin dinge is ingevoeg.
So gou as wat jy plaas dit in jou hash tafel,
aanvaar daar is geen geskakelde lys en jy kan oordeel binne 'n geskakelde lys
wat was die eerste plaas.
Maar hier is ons plaas 2 eerste en weet wanneer dit uit te druk hierdie skikking wat 2 kom eerste.
Dit maak nie druk dit uit in net 'n bevel.
Die tegniese data struktuur wat dit gebruik is 'n geordende kaart
sodat dit kaarte sleutels tot waardes en dit onthou die volgorde waarin die sleutels is ingevoeg.
Basies is dit na 'n paar komplikasies waar dit is irriterende om werklik -
Kom ons sê jy het 'n skikking 0, 1, 2, 3, 4, 5
en jy wil om uit te neem indeks 2.
Een manier om dit te doen, laat ons sien wat dit lyk.
0, 2, 1, 3, 4.
Ontstel gebeur beide veranderlikes en verskeidenheid indekse te ontstel.
So ontstel ($ array [2]);
Nou wat is dit gaan lyk? 2 is net weg, so dit is heeltemal fyn.
Meer irriterende as jy wil dinge om werklik te wees soos 'n skikking.
Ek sal ewekansige getalle.
Let nou op my indekse.
Ek wil dit net wees soos 'n C-skikking waar dit gaan van 0 tot by die lengte - 1
en ek kan itereer oor dit as sodanig.
Maar so gou as ek die tweede indeks, wat was in die indeks 3 ontstel nie nou nie indeks 2 geword.
In plaas daarvan verwyder net die indeks, en nou is jy gaan 0, 1, 3, 4.
Dit is heel redelik.
Dis net irriterende en jy dinge soos array Splice te doen. Ja.
>> [Student] Wat sou gebeur as jy 'n for-lus
en jy wou oor al die elemente om te gaan?
Toe tref dit 2, sou dit ooit oplewer?
Iterating oor 'n skikking. Daar is 2 maniere waarop jy kan dit doen.
Jy kan gebruik om 'n gereelde for-lus.
Dit is 'n ander ingewikkeldheid van PHP.
Die meeste tale, sou ek sê, 'n soort van lengte of len of iets
aanduiding van die lengte van 'n skikking.
Dit is in PHP tel.
So tel ($ skikking); $ i + +)
Laat ons net print ($ array [$ i]);
Notice: Undefined offset: 2.
Dit is net gaan om te misluk.
Dit is die rede dat, vir die grootste deel, het jy nooit nodig het om te itereer oor 'n skikking soos hierdie.
Dit mag dalk 'n oordrywing wees, maar jy nooit hoef te itereer oor 'n skikking soos hierdie
omdat PHP bied sy foreach sintaksis waar foreach ($ skikking as $ item).
Nou as ons druk ($ item); - sal ons bespreek dit in 'n tweede - wat werk heeltemal fyn.
Die manier waarop foreach werk is die eerste argument is die skikking wat jy iterating oor.
En die tweede argument, item, deur elke slaag van die for-lus
dit gaan te neem op die volgende ding wat in die skikking. So onthou die skikking 'n bevel.
Die eerste keer deur die lus, item gaan wees 123
dan sal dit 12 dan sal dit 13 dan sal dit 23 dan sal dit 213.
Dinge regtig weird wanneer jy iets doen soos foreach.
Kom ons kyk wat gebeur, omdat jy moet nooit dit doen.
Wat gebeur as ons ongezet ($ array [1]);
Dit is waarskynlik verwag.
Jy iterating oor hierdie skikking, en elke keer as jy uitwerkingstelling van die eerste indeks.
So vir die indeks 0, neem die eerste ding, item op die waarde 0, so dit gaan te wees 123.
Maar binnekant van die for-lus ons ontstel indeks 1, so dit beteken dat 12 is weg.
So druk. PHP_EOL.
PHP_EOL is net newline, maar dit is tegnies meer draagbare
aangesien newlines in Windows verskil van newlines op Mac en UNIX.
Op Windows is newline \ r \ n, terwyl oral anders dit is geneig om net te wees \ n.
PHP_EOL is ingestel sodat dit gebruik ongeag die newline van jou stelsel.
So druk. Laat ons nie print_r ($ skikking) aan die einde.
Ek het geen idee gehad dat die gedrag sou wees.
Item neem nog steeds op die waarde 12 selfs al het ons ontstel 12 voordat ons nog ooit gekry het om dit van die skikking.
Neem nie my woord op hierdie punt, maar dit lyk soos foreach skep 'n afskrif van die skikking
en dan item neem op alle waardes van daardie kopie.
Dus selfs as jy verander die skikking binne die lus,
dit sal nie omgee nie. Item sal neem op die oorspronklike waardes.
Kom ons probeer uitwerkingstelling dit.
Wat as dit is $ array [1] = "hallo";
Selfs al is ons "hallo" in die skikking item neem nooit op daardie waarde.
Daar is 'n ander sintaksis lusse foreach
waar jy 2 veranderlikes geskei deur 'n pyl.
Die eerste veranderlike is gaan na die sleutel van daardie waarde te wees,
en hierdie tweede veranderlike gaan presies dieselfde item.
Dit is hier oninteressant, maar as ons gaan terug na ons oorspronklike geval van 'a' -> 1,
'B' -> 1,
hier as ons net itereer vir elke gewapend soos 'n item, item gaan wees 1 elke keer.
Maar as ons wil ook die sleutel om te weet wat verband hou met daardie item
dan moet ons doen as $ sleutel -> $ item.
So ons kan nou print ($ sleutel: ". Doen.
Nou is dit iterating oor en druk elke sleutel en sy geassosieerde waarde.
>> 'N addisionele ding wat ons kan doen in foreach loops is wat jy kan sien hierdie sintaksis.
-Karakters voor veranderlike name is geneig om te wees hoe PHP doen verwysings.
Waar verwysings is baie soortgelyk aan pointers,
jy hoef nie pointers, sodat jy nooit direk hanteer geheue.
Maar jy het verwysings waar 1 veranderlike verwys na dieselfde ding as 'n ander veranderlike.
Binnekant van hier laat $ doen item. Kom ons gaan terug na 1, 10.
Kom ons doen $ item + +; wat nog bestaan ​​in PHP. Jy kan nog steeds doen + +.
php.test.php. Ek het om dit uit te druk. print_r ($ skikking);
Ons druk 2, 11.
As ek het net foreach ($ verskeidenheid as $ item) gedoen item sal dan die waarde 1
die eerste keer deur die lus. Dit sal inkrementeer 1 tot 2 en dan is ons klaar.
So hang dit dan gaan deur middel van die die tweede slaag van die lus en dat die item is 10.
Dit inkremente item 11, en dan is dit net weggegooi.
Dan sal ons print_r ($ skikking), en laat ons sien dat dit is net 1, 10.
So het die inkrement wat ons gedoen het is verlore.
Maar foreach ($ skikking as & $ item)
hierdie item is nou dieselfde item as hierdie reg hier. Dit is dieselfde ding.
So $ item + + wysiging van array 0.
Basies, kan jy dit ook doen $ k -> $ item en wat jy kan doen $ array [$ k] + +;
>> Sodat 'n ander manier om dit te doen, is ons vry om item te verander,
maar dit sal nie verander ons oorspronklike skikking.
Maar as ons k, wat is die sleutel, net-indeks in ons verskeidenheid kan ons dan met behulp van die sleutel
en inkrementeer.
Dit verander meer direk ons ​​oorspronklike skikking.
Jy kan selfs doen as jy wou om een ​​of ander rede die vermoë om aan te pas -
Eintlik is dit heel redelik.
Jy het nie wil hê $ array skryf [$ k] + +,
jy wou net $ item skryf + +, maar wou jy nog steeds om te sê as ($ k === 'a')
dan inkrementeer item en dan druk ons ​​verskeidenheid.
So nou wat doen ons verwag print_r te doen? Watter waardes moet gedruk word?
[Student] 2 en 10. >> [Bowden] Slegs as die sleutel was 'n "ons druk eintlik nie.
>> Jy het waarskynlik baie selde, indien ooit, sal funksies te definieer in PHP,
maar jy kan iets soortgelyks sien waar jy 'n funksie soos die funksie wat ookal definieer.
Gewoonlik sou jy sê ($ cat, $ bar) en dan definieer dit te wees wat.
Maar as ek dit doen, dan beteken dit dat wat ook al noem watter
wat ook al noem Baz, so die eerste argument geslaag Baz verander kan word.
Kom ons doen $ cat + +;
en binnekant van hier laat doen Baz ($ item);
Nou het ons 'n funksie roep.
Die argument is geneem deur verwysing, wat beteken dat as ons dit verander
ons die wysiging van die ding wat geslaag is.
En druk ons ​​verwag - tensy ek deurmekaar sintaksis - ons het 2, 11,
so dit was eintlik geïnkrementeer.
Kennisgewing wat ons nodig het verwysings in 2 plekke.
Wat as ek dit gedoen? Wat beteken dit?
[Student] Dit sal verander. >> Ja.
Item is net 'n afskrif van die waarde in die skikking.
So item sal verander tot 2, maar die skikking ['a' sal nog steeds 1.
Of wat as ek dit doen?
Nou item word as 'n afskrif aan Baz gestuur.
Dus is die afskrif van die argument sal aangevul word tot 2,
maar item self was nog nooit geïnkrementeer tot 2.
En item is dieselfde ding as array bracket wat ookal,
sodat skikking was nooit geïnkrementeer.
Sodat beide die plekke het dit nodig.
>> PHP is gewoonlik redelik slim hieroor.
Jy kan dink wat ek wil om te slaag deur verwysing -
Dit was eintlik 'n vraag oor een van die psets.
Dit was 'n questions.txt ding waar dit gesê het,
Hoekom wil jy dalk hierdie struct om te slaag deur verwysing?
Wat was die antwoord op daardie?
[Student] Sodat jy nie iets groots te kopieer. >> Ja.
'N struct kan arbitrêr groot, en wanneer jy die struct in as 'n argument
dit nodig dat die hele struct te kopieer om dit deur te gee aan die funksie,
terwyl as jy net verby die struct deur verwysing
dan moet dit net 'n 4-byte adres as die argument aan die funksie te kopieer.
PHP is 'n bietjie slimmer as dit.
As ek 'n paar funksie en ek slaag om 'n skikking van 1000 dinge,
beteken dit dit gaan al 1000 van daardie dinge te kopieer
dit om te slaag in die funksie? Dit beteken nie dat onmiddellik te doen.
As die binnekant van hierdie funksie is dit nooit verander eintlik cat,
so as ($ cat === 'hallo') return true;
Let op ons eintlik nooit verander die argument binnekant van hierdie funksie,
wat beteken dat alles wat geslaag is as foo nooit gekopieer moet word
want dit is nie die wysiging daarvan.
So het die manier waarop PHP werke is die argumente is altyd deur verwysing geslaag
totdat jy eintlik probeer om dit te verander.
Nou as ek sê $ cat + +; dit sal nou 'n afskrif van die oorspronklike foo en verander die kopie.
Dit spaar 'n geruime tyd.
As jy nog nooit hierdie massiewe verskeidenheid raak, sal jy nooit werklik verander nie,
dit nie nodig om die kopie te maak,
AANGESIEN dat, indien ons net hierdie ampersand wat beteken dat dit nie eens kopieer dit
selfs as jy dit gaan verander.
Hierdie gedrag is genoem kopie-op-skryf.
Jy sal sien dit in ander plekke, veral as jy 'n bedryfstelsel kursus.
Kopie-op-skryf, is 'n redelik normale patroon waar jy nie nodig het om 'n kopie te maak van iets
tensy dit is eintlik besig om te verander. Ja.
[Student] Wat gebeur as jy die toename van die binnekant van die toets,
so net 1 element uit 1000 sou verander moet word?
Ek is nie seker nie.
Ek dink dit sou die hele ding te kopieer, maar dit is moontlik dit is slim genoeg dat -
Eintlik, wat ek dink is dink ons ​​het 'n skikking wat lyk soos hierdie: $ array2 = [
Dan indeks 'a' is 'n verskeidenheid van [1 2 3 4], en die indeks 'b', is 'n verskeidenheid van wat ookal.
Ek moet kommas tussen al daardie. Verbeel jou daar is kommas.
Dan 'c' is die waarde 3.
Okay.
Laat ons nou sê dat ons doen $ Baz ($ array2);
waar Baz nie deur verwysing.
So $ cat ['c'] + +;
Dit is so 'n voorbeeld waar ons verby array2 as 'n argument
en dan is dit die wysiging van 'n spesifieke indeks van die skikking deur die verhoog van dit.
Ek het eerlik het geen idee wat PHP gaan doen.
Dit kan maklik 'n afskrif van die hele ding, maar as dit is slim,
dit sal 'n afskrif van hierdie sleutels waar dit sal sy unieke waarde
maar dit kan nog steeds op dieselfde skikking 1,2,3,4
en dit kan nog steeds op dieselfde skikking.
Ek sal iPad dit.
Ons slaag in hierdie skikking waar hierdie man punte 3, hierdie man [1,2,3,4],
hierdie man [34, ...]
Nou dat ons dit wat te Baz, is ons die wysiging van hierdie.
As PHP is slim, kan dit net doen -
Ons het nog 'n paar geheue te kopieer, maar as daar was hierdie groot geneste subarrays
Ons het geen behoefte om diegene te kopieer.
Ek weet nie as dit is wat dit doen nie, maar ek kan dink om dit te doen.
Dit is ook 'n mooi groot voordeel van C oor PHP.
>> PHP maak die lewe soveel makliker vir 'n baie van die dinge,
maar jy soort van het absoluut geen idee hoe goed dit sal voleindig
want ek het geen idee onder die enjinkap wanneer dit maak van hierdie afskrifte van dinge,
O, is dit gaan na 'n konstante tyd afskrif te wees,
is dit net gaan 1 wyser te verander, gaan dit 'n belaglik moeilik lineêre kopie?
Wat as dit nie kan vind nie ruimte?
Is dit dan nodig om om vullisverwydering te voer om meer ruimte te kry?
En vullisverwydering kan arbitrêr lank neem.
In C jy hoef nie te bekommer oor hierdie dinge.
Elke enkele lyn wat jy skryf jy kan pretty much rede oor hoe dit gaan om te presteer.
>> Kom ons kyk terug op hierdie.
Hoe lekker is dit dat jy nie het om te gaan met 'n hash funksies,
geskakelde lyste, of iets soos dit?
Sedert die werk met hash tabelle is so maklik om nou, hier is 'n prettige legkaart om op te werk.
Open 'n lêer genoem unique.php en skryf 'n PHP-program
(Ook bekend as 'n "script").
Ons is geneig om hulle skrifte te bel indien hulle is 'n kort dinge wat jy loop op die command line.
Basies, enige taal wat jy stel nie, maar jy gaan die uitvoerbare uit te voer
op die opdrag lyn, kan jy bel dat uitvoerbare script.
Ek kon net so goed skryf 'n C program wat dit doen,
maar ek noem dit nie 'n script sedert ek die eerste stel en dan hardloop die binêre.
Maar hierdie PHP-program gaan ons 'n script te roep.
Of as ons het dit geskryf in Python of Perl of Node.js of enige van daardie dinge,
ons wil hulle alle skrifte noem omdat jy hardloop hulle by die command line
maar ons stel hulle nie.
Ons kan dit doen redelik vinnig.
Ons gaan nie bevat SPASIES te gebruik. Laat ons net blaas deur middel van hierdie.
Noem dit uniek, skryf 'n program.
U kan aanvaar dat die insette sal een woord per reël bevat.
Eintlik, sal bevat SPASIES redelik triviaal om te gebruik.
unique.php.
Eerste ding wat die eerste, ons wil om te kyk of ons geslaag is 1 command-line argument.
Net soos jy sou verwag argc en bevat SPASIES in C, het ons nog in PHP.
So if ($ argc == 2) dan is ek nie sal gaan met die druk van 'n boodskap of iets.
Ek sal net verlaat, fout kode van 1.
Ek kan ook terug 1.
Selde in PHP is jy by hierdie toestand waar ons -
Gewoonlik is jy in 'n funksie genoem deur 'n funksie genoem deur 'n funksie wat deur 'n funksie genoem.
En as iets verkeerd gaan en jy wil net alles heeltemal verlaat,
uitgang eindig net die program.
Dit bestaan ​​ook in C.
As jy in 'n funksie in 'n funksie in 'n funksie in 'n funksie
en jy net wil die dood van die program, kan jy bel uitgang en dit sal net verlaat.
Maar in PHP is dit selfs meer selde dat ons op hierdie top vlak.
Gewoonlik is ons binne-in 'n soort van funksie, so noem ons afrit
sodat ons nie hoef terug te keer 1 ding wat dan besef daar is 'n fout
sodat terugkeer as wat erken daar was 'n fout.
Ons wil nie om te gaan met dit, so exit (1);
opbrengs (1), in hierdie geval sou wees ekwivalent.
>> Dan wat ons wil oopmaak, wil ons fopen.
Die argumente gaan om te kyk redelik soortgelyk.
Ons wil fopen ($ bevat SPASIES [1], en ons wil dit oop te maak vir lees.
Dit gee 'n hulpbron wat ons gaan f te roep.
Dit lyk redelik soortgelyk aan hoe C doen nie, behalwe ons het nie FILE * om te sê.
In plaas daarvan het ons net sê $ f. Okay.
Eintlik, ek dink dit gee ons selfs 'n wenk as PHP funksie genoem lêer. PHP lêer.
Wat dit gaan om dit te doen, is om 'n hele lêer lees in 'n skikking.
Jy hoef nie eens te fopen dit. Dit gaan om dit te doen vir jou.
So $ lyne = lêer ($ bevat SPASIES [1]);
Nou al van die lyne van die lêer is in lyne. Nou wil ons die lyne te sorteer.
Hoe kan ons die lyne sorteer?
Ons sorteer die lyne.
En nou kan ons druk of wat ookal.
Waarskynlik die maklikste manier is om foreach ($ lyne as $ lyn) echo $ lyn;
[Student] Ons wil nie eens lyne kruis deur die verwysingstelsel iets in die soort?
Dit is waar die soort sou gedefinieer word as funksie soort (& $ skikking).
Wanneer jy bel die funksie wat jy nie slaag nie deur verwysing.
Dit is die funksie wat definieer dit as om dit as verwysing.
Dit is eintlik presies wat verkeerd geloop het
wanneer ons alles na ons bedieners toe ons 5,3-5,4.
Tot en met 5,4, was dit heel redelik.
'N funksie nie verwag dat dit as verwysing te neem nie, maar jy kan dit as verwysing slaag
so as die funksie gebeur om dit te verander, is dit nog steeds verander.
Soos van 5,4, is jy nie veronderstel om dit te doen.
So nou is die enigste manier waarop jy beweeg deur verwysing is as die funksie uitdruklik dit nie.
As jy nie wil hê om dit te verander, dan moet jy $ afskrif = $ lyne en slaag kopie te doen.
So nou lyne sal bewaar word en 'n afskrif sal verander word.
php.unique.php. Ek kan iets gemors het.
Onverwagte "soort".
Daar gaan iets wat dit doen vir ons.
Dit is nie eens daar nie.
Let op wanneer jy dit lees die handleiding wat die eerste argument word verwag om 'n skikking te wees
en dit is geneem deur verwysing.
Hoekom is dit vir my gekla? Want ek het hierdie funksie Sorteer nog hier wat ek wil nie.
Okay, php.unique.php. Ek het dit nie slaag om 'n argument, omdat ek nie 'n lêer.
Dit is php.unique.php op test.php.
Hier is test.php almal uitgedruk in 'n mooi gesorteer einde.
Let daarop dat gesorteer orde is nogal vreemd vir 'n kode lêer
want almal van ons leë lyne gaan eerste kom
dan gaan al van ons 1 vlak inkepings te kom
dan al ons geen inkepings.
Ja. >> [Student] So vir die bronkode is dit nie geslaag deur verwysing?
Is dit algemeen deur waarde geslaag?
[Bowden] Wanneer jy bel 'n funksie, is dit nooit bepaal of dit goedgekeur is deur verwysing.
Dit is die funksie definisie wat bepaal of dit goedgekeur is deur verwysing.
En kyk na die funksie definisie van die soort of net kyk na hierdie,
dit neem om die argument deur verwysing.
So, ongeag of jy dit wil hê om dit te neem deur verwysing, is dit nie neem dit deur verwysing.
Dit verander die skikking in plek.
Dit is nie net toegelaat nie. Jy is nie toegelaat om dit te doen. >> [Student] O, okay.
[Bowden] Hierdie is 'n soort gaan lyne te neem deur verwysing, en dit verander.
En weer, as jy nie dit wil hê om dit te doen, kan jy 'n afskrif van die soort.
Selfs in hierdie geval, kopieer is nie eintlik 'n afskrif van die lyne.
Dit wys net aan dieselfde ding totdat dit die eerste keer kry modified
waar dit gaan eers in die soort funksie verander,
waar, want dit se kopie-op-skryf, nou 'n afskrif van die afskrif gemaak gaan word.
Jy kan dit ook doen. Dit is die ander plek wat jy kan sien ampersand.
Jy sien dit in foreach loops, jy sien dit in die funksie verklarings,
en jy sien dit toe net veranderlikes toeken van.
Nou het ons niks bereik het deur dit te doen
omdat kopieer en lyne is letterlik die dieselfde ding.
Jy kan gebruik om lyne en kopieer uitruilbaar.
Jy kan ontstel ($ kopie) doen, en wat nie ontstel lyne,
verloor jy net jou verwysing na dieselfde ding.
Dus as van hierdie punt, nou lyne is die enigste manier wat jy kan toegang tot lyne.
>> Vrae?
Ja.
[Student] Heeltemal van die onderwerp af, maar jy hoef nie PHP met die >> Jy hoef nie te sluit.
Okay.
[Bowden] Ek sou so ver gaan as om te sê dit is swak praktyk om hulle te sluit.
Dit is waarskynlik 'n oordrywing, veral in 'n script,
maar laat ons kyk wat gebeur as ek dit doen.
Dit het niks gedoen nie. Wat as ek wou - [sug]
Ek nodig het om 'n argument te slaag.
Skiet. Ek noem dit verkeerd.
So php.unique.php met 'n argument.
Nou het ek nie eens nie nodig nie.
Ek sal dit 'n geldige argument slaag.
Hierdie gedruk wat dit ookal is druk.
Ek druk kopie en 'n afskrif bestaan ​​nie. So lyne.
Dit alles druk, en dan agterkom al hierdie junk hier neer,
want in PHP enigiets wat buite PHP tags
is net gaan om te word letterlik gedruk.
Dit is die rede waarom HTML, dit is so lekker dat ek div blah, blah, blah klas of wat ookal kan doen,
blah, blah, blah en dan doen 'n PHP-kode en dan doen einde div.
En nou druk ek kry my mooi div tot bo, alles wat PHP gedrukte, div aan die onderkant.
Rampspoedige wanneer so iets gebeur, wat is redelik algemeen,
net 'n verdwaalde newline aan die onderkant van die lêer.
Sou jy nie dink dat dit sou wees dat die groot van 'n deal
totdat jy kyk na die feit dat met blaaiers -
>> Hoe aansture werk of basies enige headers werk,
wanneer jy jou verbinding na 'n webwerf en stuur dit terug al hierdie headers en dinge
soos reaksie 200 of reaksie aanstuur of wat ook al,
headers is net geldig tot die eerste byte van data gestuur word.
Jy kan jou verwys na duisende van tye, maar so gou as die eerste byte van data gestuur
Jy is nie veronderstel om weer aanstuur.
>> As jy 'n verdwaalde newline aan die onderkant van 'n lêer
en laat ons sê dat jy hierdie funksie gebruik en dan wat jy wil -
Kom ons sê dit is 'n ander lêer wat index.php en jy require_once iets -
Ek kan nie dink van 'n goeie voorbeeld daarvan.
Die probleem gebeur wanneer hierdie lyn aan die onderkant kry eggo.
Jy wil nie enigiets te gewees het nog eggo.
Selfs al is jy nie van plan is op enigiets kry eggo het iets eggo kry
en so nou is jy nie veronderstel om nie meer headers te stuur
en jy gaan om klagtes te kry.
Jy hoef net nie dié sluiting tags.
As jy van plan is om iets te doen met HTML -
en dit is heeltemal redelik om te doen hier neer div watter
en dan op hierdie punt wat jy kan of jy kan sluit nie.
Dit maak nie regtig saak nie.
Maar in PHP scripts dit is skaars om dit te sluit.
Wanneer alles is PHP, alles,
jy nie regtig nodig het om dit te sluit / moet jy dit nie naby.
>> Hantering met stringe is baie mooier as in C.
In PHP jy kan spesifiseer 'n string met 'n enkel of dubbel aanhalings.
Met aanhalingstekens jy nie kan "ontsnap" rye gebruik.
Voortdurend ontsnap, blah, blah, blah.
So printf is baie skaars in PHP.
Ek dink ek printf sou gebruik as ek wou 'n soort van ding te doen - in pset 5 wat jy gebruik sprintf of wat ookal.
Maar jy wil 001.jpg en 002.jpg te doen.
So vir daardie soort van ding waar ek eintlik wil die teks te formateer ek sou printf gebruik.
Maar anders sou ek net gebruik string aaneenskakellling.
Ek het nooit regtig printf gebruik.
Ons is net die onderskeid van die besonderhede tussen aanhalingstekens en dubbele aanhalingstekens.
Die grootste verskil is dat aanhalingstekens, sal dit letterlik gedruk word.
Daar is geen char datatipe in PHP, in teenstelling met C, so dit is gelykstaande aan.
Hulle is beide stringe.
En die lekker ding oor 'n enkele aanhaling snare is ek kon sê "hello world!" blah, blah, blah,
$ $ Wooo.
Wat gebeur wanneer ek print hierdie is dit letterlik druk.
Laat ons ontslae te raak van al ons goed.
So eggo $ str1;
Dit letterlik al daardie dinge: dollar tekens gedruk,
backslash n, wat sou jy dink sou wees newlines -
al hierdie dinge is dit druk letterlik.
Die enigste ding wat jy nodig het om te ontsnap is enkele aanhalings
want anders sou dink dat dit die aanhalingstekens se sluitingsprys.
Dubbele aanhalingstekens, heeltemal anders.
Sien ons reeds die accentuering cluing ons op wat is om te gaan verskriklik verkeerd.
php.unique. Undefined variable: wooo, want dit word geïnterpreteer as 'n veranderlike genaamd wooo.
Dubbele aanhalingstekens laat jy 'veranderlikes in -
Kom ons sê $ name = "Rob";
So echo "Hallo, my naam is $ naam!";
Dit erken dit as 'n veranderlike.
Wanneer ek hardloop dat - en ek sal voeg 'n newline - Hi, my naam is Rob! en hello world!
Dit is omdat ek nooit die druk van die wooo verwyder hierbo.
Daar is 1 verdere stap wat jy kan doen.
$ Array = [1, 2, 3];
Wat gebeur as ek wil die eerste indeks van skikking te druk?
Jy doen $ array [0].
Die accentuering is 'n leidraad. Wat gaan dit doen?
php.unique.
Hi, my naam is 1! wat is nie wat ek wou hê.
Accentuering vir my gelieg.
Kom ons probeer om 'n "-> 1, 'b' -> 2.
Dit is hoe ek wil hê om dit te skryf.
Onverwagte enkele aanhaling (T_ENCAPSED blah, blah, blah, blah, blah).
Die idee is dat dit nie die erkenning van hierdie as deel van die skikking.
Dit is nie die erkenning van hierdie array geïndekseer deur letter a.
Jy wil om te doen wat tussen accolades,
en nou is alles wat in hierdie krullerige brace sal geïnterpoleer moet word,
wat is die woord wat ons gebruik om mettertyd die invoeging van hierdie veranderlikes in die regte plekke.
Nou doen, php.unique en Hi, my naam is 1! soos verwag
of Hi, my naam is Rob!
Een ding wat is soort van mooi oor aanhalingstekens is dat -
Daar is 'n paar koste te interpol.
As jy gebruik dubbele aanhalingstekens, die tolk het om te gaan oor hierdie string,
om seker te maak dat, "O, hier is 'n veranderlike Nou moet ek gaan kry dat die veranderlike en plaas dit hier."
Selfs as jy nie gebruik nie enige veranderlikes,
niks binnekant van hierdie dubbele aanhalingstekens moet word geïnterpoleerd,
maar dit sal nog stadiger wees, want dit moet gaan oor die dubbele aanhalingstekens
op soek na dinge wat aangespreek moet word geïnterpoleerd.
So aanhalingstekens kan 'n bietjie vinniger as niks moet word geïnterpoleerd,
en ek is geneig om selfs Gebruik aanhalingstekens, "Hi, my naam is '. $ Array ['a'] in elk geval.
Dit gaan te wees gelykstaande aan wat ons gehad het voordat.
Maar dit is 'n kwessie van voorkeur.
As jy met behulp van PHP, het jy waarskynlik sorg nie oor die spoed verskil.
Daar is nie genoeg om hulle uit te redeneer om te begin met.
>> Die finale en enige vrae?
>> Ons het eintlik het nie eens kry deur dit alles, maar hierdie dinge was vervelig.
Die laaste ding wat dit is soort van mooi in PHP is wanneer jy te doen het met HTML,
jy gebruik dit 'n bietjie, sodat die mooi kortpad sintaksis vir die druk van 'n veranderlike.
Sonder om PHP hier, is hierdie kort tags genoem.
Amptelik as van PHP 5,4, word dit afgekeur.
Jy word aanbeveel om php te sit.
Dit is nog steeds ondersteun, so kort tags met die <= is nog steeds heeltemal fyn.
Dit is by verstek ondersteun, sodat jy kan gebruik hierdie as jy wil, en hulle is redelik gerieflik.
>> Enige vrae?
Alles reg.
>> Bly classy, ​​San Diego.
[Chuckles]
Bye. [Lag]
[Applous] [lag]
>> [CS50.TV]