[Powered by Google Translate] [Article 8] [Menys Còmode] [Nate Hardison] [Harvard University] [Aquesta és CS50.] [CS50.TV] Benvinguts a la nostra segona a última secció. En aquesta setmana parlarem de PHP, i després la setmana farem un petit repàs per la prova 1. Anem a partir de la pàgina 3 del problema estableix pack, i treballarem a través de la secció de preguntes amb força rapidesa. A la pàgina 3, vam començar a parlar de la diferència entre C i PHP en el sentit que PHP és un llenguatge de tipus dinàmics, mentre que C és estàtic de tipus, i ningú ha fet molt ràpid cap codificació en alguna cosa com PHP o Python o Ruby abans, JavaScript? Totalment nou? Bé. Tots aquests llenguatges que acabo d'esmentar són molt diferents de llenguatges com C i C + + i Java en el sentit que quan es declara una variable que no ha de declarar Quin tipus de variable és, pel que en C que estaven atrapats haver de dir sempre això serà una variable int, o això serà una variable char *, mentre que amb PHP, amb Python, amb Ruby, amb una gran quantitat d'idiomes més modernes que no han de fer això en absolut. Vostè acaba de declarar la variable, i en el cas de PHP vostè declara que és una variable amb el prefix amb un signe $, i després el tipus de la variable es determina per qualsevol valor que està sostenint, que és una mena de fresc. Per jugar amb això una mica, tenim exemple de codi PHP aquí entre les etiquetes d'inici i fi. Estem utilitzant aquest tipus de com HTML en el sentit que tenim aquestes esquadres aquí per obrir i tancar. Veuràs això amb HTML. Veurà la mateixa classe de sintaxi de XML també. Això indica el començament d'un bloc de PHP. Aquesta php? És específic de PHP. Tanquem tot amb un> també. Anem a obrir un arxiu en el nostre dispositiu mitjançant el que vol. En aquest paquet es diu cridar dynamic.php. En veritat, es pot dir el que vulguis, però el nom de fitxer i serà important més endavant, de manera que només recorda com es digui. Vaig a canviar l'aparell, i jo vaig a fer un directori per secció 9 Jo crec que estem en aquest moment. I anem a entrar a la secció 9, i jo vaig a utilitzar gedit. A veure, gedit, i jo vaig a trucar dynamic.php meu. Boom. Dins dynamic.php, ja que s'indiquen fitxers PHP i vull executar aquest a través de l'intèrpret PHP He de començar tot d'aquells amb etiquetes obertes, així que vaig a començar a aquells immediatament, donar-me una mica d'espai entre les etiquetes, i llavors l'objectiu d'aquest exercici era jugar amb aquesta funció es diu gettype, per gettype, aquesta funció aquí. Recordeu que no hi ha cap guió o un espai o un guió ni res d'això que separa les dues paraules, obtenir i escriure, només una paraula del tot. Però el que això farà és si pas en una variable per gettype, per exemple, $ var o $ x, això em dirà en una mena de format de depuració el que el nom d'aquest tipus és. Anem a experimentar aquí. En particular, si un mira cap enrere en l'especificació del conjunt de processadors tenim unes poques línies de codi diferents aquí. A la primera línia de codi que inicialitza aquesta variable, $ var, que és igual a 7, i després tenim aquesta línia printf que diu: hey, var printf està en blanc. Printf és una de les moltes formes en que pots imprimir coses en PHP. Sovint, vostè veurà la funció d'eco en lloc de printf, printf però tots estem familiaritzats amb haver estat programant en C per un temps. El que en realitat es pot fer és que veurem si funciona copiar i enganxar. Vaig a donar-li una oportunitat. Anem a anar de nou cap a l'aparell. Bé, i aquí anem. I l'espai és una mica estrany, però aquí anem. Tenim el codi aquí. [Estudiant] És estil no és bo a la pestanya ell? Com diu? [Estudiant] És convencional a la pestanya d'això? Bé, així que Sam li pregunta si és convenció a la fitxa o no. En general sí. En aquest cas he optat per no fer-ho. Honestament, vostè veurà coses diferents entre els diferents programadors. PHP se sol utilitzar amb freqüència en combinació amb HTML i altres idiomes, de manera que de vegades la impressió es veurà una mica estrany si guió en PHP inici i fi. Realment depèn. En aquest cas, la còpia i enganxar no lliga les pestanyes per a mi, però sens dubte és, com vostè ha dit, fer-lo més clar. Molt bé, si guarda aquest codi en dynamic.php llavors el que es pot fer és baixar a la finestra de terminal on estic per aquí en gedit, i per fer l'equivalent de compilació usant make i després executar el codi en C tot el que té a veure amb l'arxiu PHP és posar en marxa l'intèrpret PHP, que és un petit programa anomenat PHP, i l'argument que dóna a l'intèrpret és el fitxer que voleu interpretar. En aquest cas, dynamic.php. Vaja, on el poso? Oh, em vaig posar a la secció 9, i aquí estic. Per això. Ara si em quedo una altra vegada veiem que en la meva primera trucada funció gettype var és un nombre enter. En la següent var és una cadena, i després en el tercer var és un boolean. L'interessant d'això és que si ens desplacem de nou veiem que aquests són els tipus similars als que teníem en C. Vam tenir INT en C. Hem tingut sort de cadenes en C, així cadenes no eren un tipus totalment de fiar en el sentit que nostra cadena CS50 era realment què? Com diu? Missy? [Missy] Char *. Sí, va ser aquest char * que utilitzem. Al començament del semestre que feiem servir el tipus de cadena, però en realitat era un char * sota el capó. Acabem de tipus definit, mentre que en PHP aquestes cadenes són un tipus real. No hi ha res més d'això tipus char *. Vas a veure que podem fer moltes més coses amb les cadenes molt més fàcilment en PHP que vam poder a C, i, finalment, tenim aquest tipus boolean, i la gran diferència aquí és que si es desplaça cap avall, veiem que el nom d'aquest tipus Ara string sencer, booleà i en lloc de, int i bool i com es recullen diferents llenguatges de programació, suposant que en algun moment de les seves vides que vostè entri en contacte amb els diferents t'adonaràs de petits capricis com aquest on C diu sencers sencers. Alguns en diuen sencers. Hi ha altres termes que vostè trobi. Int gran que hem vist avui en SQL. També hi ha nombre i després bool, boolean, tot tipus de diferències allà. Això no és molt interessant, però ara em vaig a donar una mica de temps- si s'amplia fora a treballar a través d'aquest exercici en la part inferior de la pàgina 3 on se li pregunta quins tipus corresponen a aquests valors aquí a la part inferior. Comptem amb 3,50. Tenim aquesta cosa aquí, que és interessant. No hem vist això abans, encara que si vostè ha estat seguint al llarg de conferència vostè probablement ja sap el que és això. Després tenim això, que això és una espècie de funky. Vostè reconeix això. Què és això en C? Sam? Què li oferim en aquest C? Obriria un arxiu anomenat dynamic.php i fer-ho llegible. Sí, i quin seria el tipus de variable que volem assignar a aquest? Estrella de l'arxiu. >> Exactament, volem assignar a un arxiu d'estrella. Això és legítim PHP també. Executeu això. Mireu el que succeeix quan es passa això en gettype. I després també fes un cop d'ull al que és nul, el que podria ser en PHP. Et vaig a donar un parell de minuts. Vostè, literalment, pot copiar i enganxar aquests valors en, i després farem una trucada a l'atzar poc sobre vostè i veure el que tens. [Estudiant] Tinc una pregunta. << Yeah. En una de les conferències David va dir que hi ha alguna cosa que vostè pot posar a la part superior del seu arxiu de manera que vostè no ha d'escriure en PHP cada vegada. ¿Què ha estat això? Probablement estava parlant de l'explosió lliura, l'explosió hash. És una directiva que si marca l'arxiu com executable llavors el que fa és quan s'executa l'arxiu que li dirà al programa de shell per utilitzar l'intèrpret de PHP per interpretar els continguts de l'arxiu. La pregunta és: quina va ser la línia especial que podríem incloure en la part superior dels nostres arxius PHP per no haver d'incloure aquesta línia de PHP o PHP aquest ordre cada vegada que vulgui executar l'arxiu? I vostè pot fer això amb un munt d'arxius diferents. Crec que depèn de la ubicació del binari PHP s'emmagatzema, però sovint usr / bin / php és un bon lloc per començar. Podeu evitar-ho exactament per tornar al seu aparell i escrivint quina php. La comanda que s'adona de quan estàs executant binari o una ordre a l'arxiu corresponent. Això em diu que el PHP és realment aliasing aquest arxiu binari que s'emmagatzema en usr / bin, que és on molts dels binaris del sistema estan instal · lats. Per exemple, si em desplaço fins al cim, ara que he posat aquest #! en línia aquí Em pot desplaçar-se cap avall, i puc tractar d'executar dynamic.php, però em surt aquest error sobre el permís que se'ls nega, i el que això significa és que aquest arxiu no està donant permisos d'execució. No està marcat com un arxiu que algú pot córrer. En fer make o Clang i tens un arxiu executable de la mateixa el compilador va ser prou intel · ligent per saber que hey, estic construint un executable. És possible que vulgueu per a la seva execució, de manera que seria configurar els permisos per a vostè. Aquest no és el cas, però, quan es crea un arxiu normal de zero, La raó és en general no desitja tenir cap fitxer al sistema sigui executable, pel que en realitat han d'anar i fer-ho manualment. La manera més fàcil de fer-ho és amb la comanda chmod, i chmod + x diu afegir el bit executable perquè no és la part de lectura, el bit d'escriptura i el bit executable, r, w i x, i dient: chmod + x s'encén el bit executable per llavors l'arxiu que especifica, que en aquest cas serà dynamic.php. [Estudiant] és que encén per tot el món? A veure això, així que com puc comprovar per veure els permisos? Saps com m'agradaria comprovar els permisos d'un arxiu? [Resposta dels estudiants inaudible] Com? >> [Estudiant] XSD. XSD ens dóna l'arxiu en hacks. Llistat de tots els arxius,-l, es em mostri tots els arxius en el meu directori una mica en el seu llistat llarg, detallat, i aquí veiem que aquest arxiu dynamic.php va ser modificada per última vegada 5 de novembre a 04:21 PM. El propietari d'aquest arxiu es jharvard. Aquest és l'usuari que ha iniciat la sessió Aquest és l'usuari estic treballant com, i si vostè està també en l'aparell que està també treballant com jharvard usuari. Vostè està en el grup d'estudiants, i aquestes són les coses que es veuen sovint. Podem entrar en molt detall aquí, però en la seva major part el que vols veure quan vostè està mirant per veure si o no un arxiu és executable és principalment l'usuari que té l'arxiu, el propietari, de manera que aquest jharvard, i llavors tenim els bits de permisos d'aquí a l'esquerra, i la manera de llegir això és que l'últim bit típicament s'utilitza per canviar la si més no en-en aquest cas això últim sovint s'ajustarà a l'anunci que indiqui que l'arxiu és un directori i no un arxiu normal. Llavors els 3 bits a la dreta aquí determinar els permisos que el propietari de l'arxiu té, pel que en aquest cas jharvard, com a propietari de l'arxiu, pot llegir i escriure en aquest arxiu, però no hi ha un guió dient que jharvard no pot executar aquest fitxer. Els propers 3 bits són per al grup, de manera que aquest és el grup d'estudiants, així que si hi ha diversos usuaris al meu aparell, i que tenia múltiples usuaris com a part del grup d'estudiants, llavors tots poden llegir l'arxiu, però no pot escriure, i de la mateixa manera els altres, el món només pot llegir l'arxiu també. Hi ha una valoració crítica bona i llarga sobre això, així que vostè pot llegir en línia. En l'especificació del conjunt de problemes d'entrar en això amb més detall. [Estudiant] El 218 es refereix al món? El 218 és-off de la part superior del meu cap m'estic oblidant, però no. Anem a veure. Estic cega en això ara mateix. Tornar al que anàvem a fer amb aquest chmod + x on volíem donar permisos dynamic.php executables, i el dubte era si això donaria permisos d'execució per a tothom o només jharvard, i podem veure això d'executar les ordres i escrivint ls-l, i ara veiem que està marcada com executable. Es veu que hi va haver un canvi de color. Ara dynamic.php apareix en verd, i sembla que la resposta a la pregunta és què, Charlotte? [Charlotte] Només jharvard. >> Només jharvard, sí. Si volem convertir el bit d'execució a tot el món per Com podem fer això? Alguna idea? >> A + x? Sí, exactament. Charlotte va dir que podem fer chmod + x d'una de dynamic.php, i ara si correm ls-l veiem que els bits d'execució són, en efecte encesa per a tots. I en realitat es pot fer el contrari d'això, el que es pot apagar per a tots amb menys. Ara s'ha apagat, i ara podem tornar a engegar per jharvard pel que en realitat podem executar ara, i ara que es veu quan s'executa el codi d'aquest especial #! línia a la part superior, #! línia, va dir a la closca, va dir al nostre terminal hey, quan l'arxiu s'executa, utilitzar / usr / bin / php per interpretar aquest arxiu i després imprimir el resultat. [Pregunta estudiant inaudible] És clar, deixa passar de tornada. Igual que aquest. Vostè veurà totes aquestes directives començar amb aquest lliura i després el signe d'exclamació, de vegades anomenat un cop shebang, hash. [Estudiant] Com podem córrer amb dynamic.php php abans que sigui executable? La pregunta era: com podem executar està utilitzant el binari de PHP mentre dynamic.php no és executable? Això és súper important perquè així és exactament com que treballarà quan s'escriu conjunt de problemes 7. La majoria dels arxius de temps de PHP no són directament executables. La forma en que funciona és perquè és el binari PHP que és executable. L'intèrpret és el que està sent executat, i per tant el que està fent és, literalment, xarrupant en tot el contingut del nostre arxiu i dynamic.php línia que va per la línia i executar aquests comandaments, així que usant el nostre arxiu PHP com una llista d'instruccions. No és directament executora. Aquí és on diem que aquests arxius s'interpreten en temps d'execució. És un llenguatge de temps d'execució en lloc d'una cosa que es determina en temps de compilació, no és un llenguatge compilat com C Hi ha una manera d'aconseguir un llenguatge de temps d'execució per actuar com si fos un llenguatge de temps de compilació, com si vostè té tot el rodatge realitzat al servidor en lloc de, ja saps el que vull dir? Sí, així que la pregunta és ¿Hi ha alguna manera d'aconseguir executar idiomes moment d'actuar més com els tipus en temps de compilació d'idiomes? I aquí estan, vull dir, que és una àrea activa d'investigació per moltes d'aquestes empreses. Crec que Facebook ha fet una gran feina amb PHP i la compilació de baix, pel que és més ràpid, optimitzant el seu ja que el seu lloc està construït en PHP. Si vostè ha estat seguint Node.js en absolut, que és una espècie d'intèrpret de JavaScript per ser capaç d'executar JavaScript fora del navegador, als afores del seu navegador web, perquè tradicionalment JavaScript acaba de funcionar dins de Firefox o Chrome, i que s'utilitza per fer animacions fresc succeir en una pàgina web i fer que la seva pàgina web dinàmica. Això ha estat construït sobre una gran quantitat de treball que ha fet Google que JavaScript i C + + uneixen, així que hi ha un munt de recerca activa per obtenir aquests llenguatges per interactuar i optimitzar, principalment perquè molta gent pot codificar en PHP i JavaScript perquè és molt més fàcil. És molt més agradable. No té punters. No ha tipus que suren al seu voltant. Volien obtenir els beneficis d'aquests idiomes en temps de compilació amb tota la comprovació del tipus i la velocitat i l'ús de memòria més baixa i que tot mentre que encara manté la flexibilitat i la facilitat d'ús d'aquests els més nous. De tornada al nostre pla original d'atac. Tenim algunes d'aquestes preguntes aquí a la nostra especificació de problemes. Anem a anar a través d'ells molt ràpidament, i anirem per l'habitació. Charlotte, quin tipus és de 3,50? [Charlotte] Això és un doble. >> És un doble. Jimmy, què és aquest proper? >> Una matriu. Una matriu, impressionant, i Jared, quina és la funció fopen? [Jared] És un recurs. >> És un recurs. Això és una mica d'un ésser nou, no un estel de l'arxiu, no un arxiu. És un recurs és el tipus en PHP, i ho sento, Ella, la hipòtesi nul · la és l'últim? Null. Null, com s'escriu en PHP? >> La mateixa forma. De la mateixa manera, capitals? >> Yeah. Sí, està bé. Aquí, tenim un doble, tenim una matriu, tenim un recurs, i llavors tenim nul. Anem a veure ara si l'has vist- veurem, de manera que ara crec que el que jo també vull fer és aixecar aquesta pàgina web aquí, aquest php.net / manual, així que si vostès de copiar i obrir un navegador web. Vaig a aixecar Chrome, ja que in Vull mostrar que això no només perquè podem parlar tot el dia sobre els tipus i totes aquestes coses divertides sinó perquè aquest és el manual de PHP, i hi ha una gran quantitat de programadors de PHP que hi ha. Hi ha un munt de llocs web PHP per aquí, i com a resultat, hi ha una gran quantitat de documentació sobre PHP, i el manual, aquest php.net, és un molt bon lloc per anar quan tens preguntes sobre quina és la millor manera de fer X en PHP o el que és una funció sembla? Només tipus de familiaritzar-se amb l'aspecte que té, perquè se li ve aquí sovint, una mica per ajustar problema 7. Si vostè acaba damunt de fer un projecte final que utilitza PHP aquest serà un lloc que es convertirà molt ben informat. Sovint, la manera de fer això és que utilitzen Google per buscar el lloc, i no utilitzar el quadre de cerca que passa aquí a la part superior dreta, que és una espècie de petit. Si vostè està buscant a Google voltant buscant alguna cosa que fer amb PHP i ens veiem un dels enllaços manuals aparèixer normalment es pot confiar que com un recurs bastant bo. Impressionant, tan fora d'aquest tipus, només per curiositat, quins no ho hem vist? Qualsevol cosa que no hem vist aquí? [Estudiant] Recursos. >> Vam veure recurs a la crida fopen. [Estudiant] Objectes. >> Objectes que no hem vist amb seguretat. Devolucions de trucada que no hem vist. Hi ha alguns d'aquests pseudo-tipus. Sens dubte, només vaig veure sencer i doble. No arribem a veure alguns dels altres, així que si fem clic sobre els nombres enters podem veure hi ha enters qualssevol altres que tenen aquí? Són tots tan sencer, nombre enter, nombre enter. Alguns idiomes tenen grans tipus sencers, com vam veure en MySQL avui va haver int i després int gran. Cool. Així, PHP manual. Tornem a la nostra especificacions conjunt de problemes, i ara vaig a desplaçar-se cap avall a la pàgina 4. Una de les coses que succeeix quan rep aquests idiomes que no tenen aquest tipus estàtics, de manera que aquests idiomes en què ha de declarar el tipus de variable de fins a un front és que et donen casos en què podria començar a tenir variables de diferents tipus interactuen entre ells, i PHP fa això quan tracta de fer el que considera que és el més sensat quan es té 2 tipus diferents interactuen entre ells. Per exemple, si ens fixem en aquestes línies de codi aquí veus que tenim el que succeeix quan tractem d'afegir la cadena 1 fins al nombre enter 2. Què passa si tractem d'afegir una cadena que no és un valor numèric sinó més aviat personatges reals, CS amb el número 50? Llavors veurem, hi ha alguna cosa diferent que el que succeeix amb en lloc d'afegir una cadena a un nombre que va a afegir un nombre a una cadena, i així successivament i així successivament fins al punt en què estem rebent algun tipus de coses rares aquí on tenim 7 + veritat. Què diables vol dir això? Si vostès van per davant i enganxar una mica d'aquest codi en l'aparell. Vostè pot mantenir-lo en dynamic.php. Anem a veure què passa. [Estudiant] Només ha d'utilitzar la impressió no, printf? Sí, i trobareu que la impressió és també una funció vàlida per imprimir en PHP. Hi ha moltes maneres diferents de fer-ho. Anem a veure amb un parell dels exemples més endavant, una vegada que comença a parlar sobre l'únic problema que escriurem i després la concentració problema que escriurem que tot i que tenim fopen i fclose que no és sovint la forma més senzilla de llegir en el contingut d'un arxiu. PHP té un munt d'aquests romanents C-like. [Estudiant] Quan poso en tots els 6 d'aquestes coses que només et donen un nombre com una sortida. [Nate H.] Quan es posa en tots els 6 d'aquestes coses. Anem a veure que és perquè és possible- una cosa és que aquestes trucades d'impressió no s'acaben al final amb noves línies. No hi ha nova línia que separa cadascuna d'aquestes trucades d'impressió, així que potser vostè està rebent un gran nombre, i no deixa de ser amalgama de caràcters de nova línia. [Estudiant] Bé, com puc estar segur- Bé, hi ha un munt de maneres diferents. Manualment, pot posar en una impressió d'un caràcter de nova línia, un ressò d'un caràcter de nova línia, imprimir de nova línia. [Estudiant] Així que trobo és el mateix que printf? Printf és com printf on s'està imprimint una cadena amb format. El estàs subministrament de la cadena de format i, a continuació totes les variables de marcador de posició. Sovint és una cosa que no s'utilitza- veurem, com un descàrrec de responsabilitat, Estic menys familiaritzat amb PHP que jo amb els idiomes de llocs web, i quan he programat en PHP que no solen usar printf perquè em resulta més ràpid utilitzar les funcions d'interpolació de cadenes que té, que entrarem i et vaig a mostrar en un segon, mentre que en C que tipus de haver de fer això hacky per aconseguir que s'imprimeixi correctament. En realitat es pot posar directament en les variables de les cadenes en PHP. Printf és una mica massa llarg per al que faig. Sí, Ella. [Ella] En general, si vostè aconsegueix error d'anàlisi significa això- igual que en C no li dirà exactament on és l'error i el que és, ¿Això vol dir mirar a través del seu codi complet i la figura cap a fora? És típicament més específic que això. Crec que en aquest cas era una mica apagat, així que crec que en aquest cas ens faltava un punt i coma. Es tractava de donar sentit a tot, així com els llenguatges interpretats, l'intèrpret es tractarà i fer tot el possible perquè tot funcioni correctament. Vas a veure, per exemple, en JavaScript Vas sovint-line declaracions finals amb un punt i coma igual que ho fan en PHP, tal com ho fan en C. En JavaScript alguns dels intèrprets de JavaScript en molts dels navegadors posarà en punt i coma per a vostè si li passa que se'ls falta. Van a tractar de donar cabuda a alguns descuit de la seva part. Aquí és on podria estar tractant i tractant i tractant de fer que les coses funcionin, i, finalment, s'arriba a un punt on diu bé, No puc fer les coses en el rescat, i aquí és on vostè obtindrà un nombre de línia que pot semblar una mica fora del lloc exacte. Està bé, així que anirem a través d'aquest molt ràpid. Ens va deixar amb Ella, així que anirem a Missy, i Missy, què impressió de la cadena 1 més el nombre 2 li donar? [Missy] 3. >> 3. Això té sentit? Una cosa així? Et dóna un nombre? Et dóna una cadena? [Missy] Diversos. >> Es tracta d'un nombre. Però val la impressió, pel que et donarà algun tipus de cadena. Una de les coses que podem fer per comprovar això és si ho fem $ var = 1 + 2 i llavors diem ressò de gettype, així que estem utilitzant un tercer tipus d'impressió aquí. Ara podem veure el que passa aquí. Aquí el que tenim és que tenim un nombre enter d'això. Tot i que es van anar sumant aquesta cadena en un nombre, que no et donin una cadena a partir d'aquesta, igual que Missy va dir. Estàvem preparant un sencer. Està bé, així que anem a veure, al costat de dalt, Kevin. CS + 50? >> [Kevin] 50. [Nate H.] 50. Això té sentit? [Kevin] Yeah. [Nate H.] Per què? Per què té sentit per a tu? [Kevin] Perquè és només tenir la cadena, amb número zero valor. Sí, molt bé. Tipus de situacions ambigües, però és bo saber el que passa. Stella, què passa després amb el número 1 + cadena 2? [Stella] 3. >> 3 de nou. I en aquest cas, no obtenim una cadena o un nombre? Anem a donar-li una oportunitat. Algú més ràpid que jo obtenir la resposta? Charlotte? Oh, no ho va fer-bé, anem a veure, farem el mateix tipus de coses on tenim un nombre més una cadena, i que repetirem el tipus, veure el que tenim. També vam rebre un nombre enter. No importa quina és la cadena, que un és el nombre. Encara obtindrem un nombre enter. És encara va a fer el que es podria esperar. D'acord, Sam, què passa amb 90 + 9 ampolles de cervesa a la paret? [Sam] 99. >> 99. No hi havia ampolles de cervesa a la paret, però. Ens fa una mica més d'informació sobre el que està passant. [Sam] Si haguessis escrit amb lletres 9 llavors tindria 90, no? [Nate H.] Yeah. La pregunta era si ens haguéssim escrit 9 sobre com N-I-N-E hauríem aconseguit 99 o 90? Ens agradaria obtenir 90. És, literalment, només a la recerca de caràcters de dos dígits. No és prou intel · ligent per reconèixer les paraules de nombres i aquestes coses. Sí [Estudiant] Existeix tal cosa com l'encasellament en PHP? Existeix, i és exactament la manera com ho faria en C. Què hi ha de 10/7, Charlotte? [Charlotte] 1,4285. [Nate H.] Sí, i què podria ser sorprenent sobre això? Què passaria si ho fessis aquest mateix tipus de coses en C, si ho has fet 10/7 en C? [Charlotte] Només li donaria vostè, depenent de com es typecasted suposo seria donar-li només un nombre limitat de dígits després del punt decimal. Sí, de manera que un nombre limitat de dígits després del punt decimal. Quina altra cosa podria ser, li donarà cap dígit després del decimal? Sovint, no tan nou, depenent de com ho està typecasting que pot o no pot convertir en un nombre de coma flotant. Aquí era una mica agradable que ho va fer. Si haguéssim mostrat això quan vam començar a fer aquest tipus de coses en C probablement hauria tingut sentit una mica més que no només ha d'anar a 1. I, finalment, Jamie, què hi ha de 7 + veritat? [Jamie] 8. >> 8. Què significa això? Suposo que només dóna el veritable valor d'1. Si. Què passa si canviem això a fals? [Estudiant] 7. Sí, així que recorda on es parla d'aquests valors binaris, 1 és activat, 0 és apagat? Ara tenim cert és 1, 0 és fals, i és possible que no hem vist en els exemples C que hem fet aquest semestre passat, però històricament el tipus bool al carrer no ha estat un tipus real, així que la gent ha utilitzat 0 i 1 en el lloc de veritable i fals. Aquesta és una manifestació d'això. Bé, així que una part important de tot això és que tenim aquests tipus. Ells poden interactuar entre ells. Sovint poden interactuar entre si de manera que siguin agradables, com hem vist aquí. És agradable ser capaç de tenir una cadena i el número 2, sumar-los i obtenir 3. Això té sentit. No obstant això, quan vostè està escrivint pàgines web, i especialment quan vostè està processant entrada de l'usuari, pel que diuen que ha escrit un formulari web que recull la informació de l'usuari i després es va a processar en la part posterior, al costat del servidor en el codi PHP si estàs esperant que el valor que l'usuari va escriure i presentar a la seva forma de ser un enter o com un nombre de punt flotant o alguna cosa per l'estil ha d'emetre explícitament i després fer una mica de comprovació de tipus. No vol dependre només d'aquest sistema de manipulació de tipus per fer les coses funcionen, sobretot per raons de seguretat i només per la solidesa del seu lloc web. Només és una cosa a tenir en compte que cada vegada que vostè està manejant les dades del formulari, tot el que ve al correu o les superglobales get assegureu-vos que sempre validar i convertir i encasellar-hi. I igual que parlàvem fa un moment que encasellament en PHP és exactament el mateix que en C, on té els parèntesis i després el tipus. Tingueu-ho en compte. Una de les funcions que li serà útil quan vostè està fent això és que hem estat utilitzant, i això és una mica com un apart- hem estat usant aquesta funció gettype aquí per esbrinar el tipus d'una variable, i si bé això és útil per a la depuració i per veure quin tipus d'una variable és no voleu utilitzar això, per exemple, en una condició on vostè està comprovant per veure si gettype de $ var = sencer fer alguna cosa. Això és dolent, dolent, dolent. En el seu lloc hi ha aquestes funcions trucades és sencer, és una cadena, és array que voleu utilitzar en el seu lloc, de manera que en aquest cas el que m'agradaria fer en lloc d'aquest tipus aquí S'utilitza el nombre enter és var. I estan sovint plantejada * is_ en el sentit que podria reemplaçar el * amb número sencer, cadena, etcètera, i només per assegurar-se que realment ràpida Es tracta int php. Sembla que pot fer qualsevol és int o s'hagi sencer també? Sí, àlies, sobrenoms tan sencers int. Cool. Com ho estem fent? Anem a agafar el ritme una mica. Ara anem a parlar sobre les matrius, així com es pot veure a la següent part de l'especificació es parla de com les matrius en PHP són lleugerament diferents del que són en C. En veritat, són una mena d'amalgama de les matrius que hem arribat a conèixer i estimar en C on tot és del mateix tipus emmagatzemen consecutivament i de forma contigua a la memòria, i vostè té aquests índexs numèrics. Vostè té l'índex 0, l'índex 1, índex 2, i guarda els valors en els índexs. També al carrer, quan va escriure Speller, que molts de vostès va fer l'enfocament de la taula hash, i va veure que no teníem un tipus diferent d'emmagatzematge en què es cartografia la clau d'un valor, de manera que en intentar desar alguna cosa a la taula hash calia especificar que volia guardar amb una clau específica, i que la clau determina la ubicació del valor i on seria emmagatzemat. Vostè té classe d'aquests dos conceptes succeint al mateix temps en una matriu de PHP, i, com a resultat, sovint ens criden a aquestes matrius associatives on s'associa una clau en un valor. En la següent part es parla d'un array PHP simple on tenim tecles a, b, i c, totes les cadenes, l'assignació als nombres enters 1, 2, i 3. I vostè pot tenir claus de diferents tipus. Vostè pot tenir algunes claus que són cadenes, algunes claus que són nombres enters. Pot tenir valors de diferents tipus. Vostè pot tenir un valor que és una cadena, un valor que és un nombre enter, un valor que és un objecte o una altra matriu, per exemple, tots en el mateix objecte de matriu, que és una mica estrany. No ha de tenir una matriu que s'acaba d'aconseguir un tipus d'element en el mateix. Vostè pot tenir moltes coses diferents passant aquí. L'altra cosa a tenir en compte és que quan vostè veu alguna cosa com això en el seu codi, que és PHP vàlid per declarar una matriu com aquesta, 0, 1, 2, 3, 4, 5, que es declara un arranjament de $ inicialitzat a ser aquesta matriu. Però el que en realitat estàs rebent sota el capó és aquest tipus de implícit generació de claus on tenim 0 a 0, 1 a 1, 2 a 2, 3 a 3. I resulta que, fins i tot si vostè té un arranjament com aquest noi aquí on té a, b i c com les tecles de i després de començar a utilitzar el mètode push matriu per a poder fer servir aquesta matriu com una pila, així que vostè pot veure que aquest objecte de matriu, aquesta matriu és en realitat es sobrecarregui. Podem utilitzar-lo com una matriu. Podem utilitzar com una taula hash. Podem utilitzar-lo com una pila. En començar a empènyer les coses en aquesta sèrie la primera cosa que empènyer a aquest serà l'índex 0 i l'índex 1 i l'índex 2. Vostè pot obtenir aquest tipus de generació implícita de tecles llevat que s'especifiqui de forma explícita. La forma en què s'especifiqui explícitament tecles, és clar, és mitjançant l'ús d'aquesta notació suport, que és similar a les matrius excepte que en lloc de permetre que únicament índexs sencers d'aquí, ara permetem que res. Si desitja que el seu clau sigui una cadena, que t'ho especifica així. Si vostè vol que sigui un int, cal identificar-lo amb el int que voleu utilitzar. Preguntes sobre els que fins ara? Una de les coses bones sobre aquesta idea és que es pot només tingui un valor emmagatzemat amb una clau particular. Si tornem al nostre aparell-em deixa esborrar algunes d'aquestes coses. I diguem que inicialitzar una matriu a ser 0, 1, 2, fet. Si jo ara sé que, per exemple, si jo trec $ arr [0] Em vaig a posar el valor 0 imprimir, i ja que no tan sols pot ser un valor emmagatzemat d'una clau particular si guardo alguna cosa en $ arr [0], diguem a, llavors sé que quan em poso $ arr [0] de nou Jo no vaig a obtenir 0 imprimir com abans. Jo només vaig a aconseguir una. Així que això és bàsicament dient que no puc tenir $ arr [0] emmagatzemar 2 valors diferents. No es pot emmagatzemar tant en 0 i la cadena, com això literalment reemplaça el que estava en $ arr [0] prèviament. La raó Porto això a col · lació és córrer, a veure què passa. Mira que tinc 0 imprimir i després aquí baix. No hi ha una nova línia allà perquè era mandrós i no indicar un polz El millor d'això és que podem utilitzar això com una manera per captar aquesta idea d'un conjunt on no podem tenir diverses claus dins d'una matriu. No podem tenir claus idèntiques dins d'una matriu. No puc permetre que la tecla 0 i el valor 1 i la tecla 0 i un valor o la tecla 0 i el valor vertader. Les claus són tot només hi ha una clau a la matriu. Tot i que pot tenir el mateix valor emmagatzemat diverses vegades a la matriu en virtut de diferents claus que no és possible tenir claus idèntiques diverses vegades en la matriu de PHP. Si ens fixem en el problema següent, unique.php, on volem obrir un arxiu PHP que conté una llista de cadenes, una cadena per línia, i volem trobar totes les cadenes úniques en aquest arxiu tot el que hem de fer és utilitzar una d'aquestes matrius de PHP i l'ús de les cadenes a l'arxiu com les claus d'aquest array i mantenir l'actualització de la nostra matriu com emmagatzemem aquestes noves claus. En llegir cada línia del fitxer que pot emmagatzemar en la matriu, i al final tindrem com les nostres claus en el nostre array totes les cadenes úniques dins de l'arxiu. Això té sentit? Anem a veure com funciona això. Anem a obrir, d'acord a les especificacions, un nou arxiu anomenat unique.php. Obriu. Oops, ho sento, nou arxiu. Anem a començar amb les etiquetes de l'inici i el final mateix. Anem a guardar-lo en la secció 9, i anem a cridar unique.php. Bé, ara zoom in La idea és obrir un arxiu, llegir en arxiu línia per línia. Per a cada línia a l'arxiu tindrem una matriu on tenim  la línia com la clau. I després, quan arribem a la final aquí Tecles $ arr són les úniques línies de les actuacions, ja que sabem que si poso la línia a la matriu moltes vegades s'acaba de mantenir reemplaçant el valor anterior, i que en realitat es pot posar com line array en si mateix així com així. Això és una mica estrany. Estem emmagatzemant el mateix valor de clau parell una i altra vegada i una altra, però ja que es garanteix que no hi haurà només una clau anomenada línia de manera que si tenim un arxiu que diu-un arxiu de sons d'animals i té guau, guau, miau, miau, mu, mu, i cada vegada que llegim un soroll animal fora com trama i l'emmagatzemem en la nostra matriu obtenim trama, i després la segona vegada emmagatzemem trama es sobreescriurà la primera vegada que l'emmagatzema. Al final, només tindrà una entrada a la matriu per a cada un dels sorolls dels animals al nostre animal arxiu de sorolls. Vostès se senten segurs que vostè pot fer front a l'obertura d'un arxiu en PHP? Una forma de fer-ho-anem a repassar aquesta manera ràpidament, que ho faci és amb fopen, com hem vist anteriorment. Pot fopen some_file.txt. Pot obrir en mode de lectura, igual que en C. Aquesta és una forma perfectament vàlida per fer-ho. També després de la lectura a l'arxiu línia per línia tenen les mateixes funcions, moltes d'elles, que ho va fer al C. Vostè té fgets. Vostè té feof, encara que no ens agrada fer servir aquesta perquè, recordi, que no era molta en C. Pot fer-ho de la mateixa manera, però aquí és una cosa realment genial. Ho sento, no vull fer $ arxiu, però hi ha una funció anomenada arxiu en PHP, i aquesta funció aquí és genial, perquè el llegeix tot el contingut l'arxiu que especifiqueu, per some_file.txt, llegeix tot el contingut d'aquest fitxer en una matriu i després li permet iterar sobre ella, la qual cosa és bastant enginyós. Si ens anem, per exemple, al nostre navegador web i ens fixem en Google per a l'arxiu PHP vostè pot veure aquí que el manual diu que l'arxiu es llegeix un arxiu sencer en una matriu, i podem file_get_contents per tornar el contingut d'un arxiu com una cadena, però en general només el rep com un conjunt és molt bonic perquè el que fa l'hi trenca de manera que cada element de la matriu és una línia de l'arxiu, pel que si ens fixem en l'arxiu 0, que és la primera línia de l'arxiu. Arxiu 1, segona línia, l'arxiu 2, tercera línia, i així successivament i així successivament. No seria agradable si això era tot el que havia de fer en C? Bastant enginyós. David va mostrar en aquesta conferència, i va ser l'idioma que va mostrar que, a més del nostre estàndard de bucle en PHP que havíem de for ($ i = 0; i <10, i + +), i vostè pot fer això en PHP també, el mateix: també tenim aquesta construcció fresc anomenat foreach. Foreach és realment útil quan iterar sobre matrius o les estructures de dades ja que li permet treure cada element de la matriu sense haver de fer-ho manualment la indexació de tu mateix, sense haver de crear manualment una variable índex, incrementar, treure el valor de la matriu en aquest moment, perquè això és una cosa molt comú que fer. Vostè probablement ha fet un munt de vegades quan estava fent coses C al llarg del semestre, de manera que amb aquesta foreach podem iterar sobre aquest conjunt d'arxius, i la sintaxi és que volem ara llaç sobre aquesta matriu i especificar que la variable que utilitzarem per emmagatzemar l'element d'aquesta matriu local, local per a l'àmbit d'aplicació d'aquest bucle foreach, és que anem a anomenar línia. Si es tracta d'un arxiu de només paraules i no hi ha una sola paraula en una línia que podríem anomenar paraula, així, en realitat només li dono un nom, el que vulguis dir, i després dins del bucle que pot fer el que vulguis amb aquesta línia variable. Si no és suficient per obtenir el valor de la matriu i també obtenir l'índex juntament amb ell es pot especificar un nom per l'índex així com el valor, i ara vostè té accés a 2 variables. Tens $ i i la línia on $ i és l'índex a la matriu, i la línia és la línia que recupera l'arxiu. Per exemple, si volem imprimir fet 0 línia de l'arxiu d'aquest tipus, podríem fer-ho de la mateixa manera que aquest, "Línia $ i del fitxer és $ line" i aquí és una cosa que també no han vist encara ni on acabo totalment saltat% aquest negoci sencer% s d que hem hagut d'enfrontar a C, i en el seu lloc m'he anat directament a escrivint les variables en línia en el meu cadena. Això es diu interpolació variable, cadena d'interpolació on està farcit de les variables en el dret, i l'intèrpret de PHP és prou intel · ligent quan està llegint a través d'una cadena que comença amb cometes- No cometes simples, amb cadenes entre cometes senzilles que vostè no pot fer això- però amb dobles cadenes entre cometes com es llegeix a través d'ella està buscant per les variables. Està caçant, i si veu les variables es prendrà el valor de la variable i ficar-ho en la cadena si es pot convertir en una representació de cadena, que és bastant enginyós. Per ara, anem a comentar la resta de tot, salvar això, i el que podem fer ara és que podem obrir un arxiu que podem anomenar some_file.txt-let 's crear un nou arxiu- i ens pot posar en un munt de coses sense sentit en aquí només per provar tot el que fos, el guarda, en diuen some_file.txt, com estic fent aquí dalt a la part superior, i ara si el zoom només per assegurar-se que tot és al mateix directori sembla que tinc unique.php i some_file.txt al mateix directori. Si em quedo unique.php php veure com s'imprimeix cada línia del meu arxiu i quin és el límit? Això és molt poderós, no? Mira, ens va prendre 3 línies de codi per obrir un arxiu. Bé, 4 línies de codi. No puc comptar avui, clarament. Però en realitat només 2 línies interessants de codi, perquè els altres 2 van ser les claus, però en aquest codi molt hem estat capaços d'obrir un arxiu, iterar a través d'ell, tregui el número de línia i la línia en si i s'imprimeixi. Cool stuff. Charlotte. [Charlotte] Tinc una pregunta sobre la sintaxi. Així foreach acords amb cada línia del fitxer que s'obre, i després, quan volem fer les coses amb cada línia que acaba de fer-ho com i després associar el valor. [Nate H.] El que pot fer aquí mateix-el dubte era el foreach té a veure amb la matriu, de manera que la sintaxi foreach és realment foreach i observi que no hi ha espai o qualsevol cosa entre ell i per a cada un el. Ells han d'anar a la dreta al costat de l'altra, i llavors es pren en una matriu, i després tens aquesta altra paraula clau es diu com el que ha de ser-hi, i després, després de la qual vostè pot posar un nom de variable, en aquest cas vostè estarà tirant dels valors de la matriu, no dels índexs, o si ho fa com ho he escrit a sota obtenir les claus i els valors. Vostè té foreach element de la matriu o el parell de la matriu com la forma adequada per al valor o com el valor just. Depenent del que necessiti, si vostè no necessita les claus, llavors vostè pot anar amb el valor. Si voleu que les tecles que pot anar amb ells. [Charlotte] També em vaig adonar que mai va declarar la io línia. Com tan sols saben el que són? [Nate H.] Què entén vostè per declarar? [Charlotte] Mai els vaig dir el que o la línia de mitjans. [Nate H.] mai Ens van dir que l'ordinador el que significa o la línia en termes de- [Charlotte] Que estan indexades o que-són [Nate H.] Mai hem dit que això se suposa que és l'índex o la clau i el valor, i això és perquè aquest és l'intèrpret PHP. Això serveix com la declaració i diu bé, la clau serà una variable anomenada i s'emmagatzema en una variable anomenada i. El valor s'emmagatzemarà en una variable anomenada línia, així que això serveix com a declaració d'aquestes variables i diu que $ i és una clau, i $ line és un valor. Sí, Ella. [Ella] Si les claus no es fan numèricament Com decidir quin ordre d'imprimir tot? És igual que l'ordre en que van entrar a? [Nate H.] Anem a donar-li una oportunitat. Crearem una variable anomenada arr, i podem fer una va a 7. Diguem que 0 va a un altre matriu amb 1, 2 o poma. Diguem 7 passa a 1, b passa a 2, i 3 passa a 4. Això és una mica boig buscant un exemple perquè estem barrejant cadenes i sencers per tot el lloc. No hi ha una ordre real a aquesta matriu. Vull dir, tot el que podíem demanar per ordre alfabètic de les claus. Podríem demanar tot en ordre alfabètic pel valor. Podríem tractar de tenir en compte que algunes són cadenes, alguns són sencers, i que es podia tractar de convertir a tots en el mateix tipus i veure què passa, o podríem considerar-los en el valor en què ja van entrar on posem a aquest tipus en primer lloc, a aquest tipus en segon lloc, a aquest tipus en tercer lloc, aquest tipus en el quart, etc. Anem a veure el que passa quan ens trobem aquest codi. Si ens desplacem cap avall i fer el mateix tipus de coses, i aquí no s'està imprimint les noves línies. Quan ho vaig llegir coses del fitxer, va ser inclòs les noves línies en els valors, que va ser per això que imprimeix molt bé, mentre que aquí no ho va fer, així que per això tot està aixafat junts. Anem a afegir a la nova línia per fer les coses bé. Anem a repetir l'execució, i aquí el mira el que va passar. S'imprimirà tot en l'ordre en que posem a la matriu. Sense preservar l'ordre en aquest sentit. Tornant al problema de visitants únics on volem ser capaços de repetir un arxiu, i donarem some_file.txt, i anem a iterar sobre ella d'aquesta manera. Vam dir que volíem utilitzar una matriu per assegurar-se que ens van donar tot el línies úniques d'allí, i podríem fer-ho molt fàcilment amb només emmagatzemar en una matriu que, per descomptat, declarar fora de l'àmbit d'un bucle, i ens va dir que si fem servir les línies a l'arxiu com les claus en la nostra gamma si entrem en una línia duplicada estaríem anul · lant el valor anterior. No és sempre possible tenir dues claus que són idèntics en la mateixa matriu. Podem fer precisament això. Ens desfarem d'aquesta declaració ressò aquí. Aquí està guardant la línia a l'arxiu en el nostre arsenal utilitzant si mateix com la clau. No hi ha res a ella, i resulta que ni tan sols necessita aquesta clau. No cal que em variable. En aquest punt, si haguéssim de fer un altre bucle foreach i estàvem a un bucle sobre cada arr i la línia d'ara, si ens fem ressò-oops, em sap greu. No podem fer servir la coma. Hem de fer servir això com a paraula clau. Ara bé, si ens fem ressò de la línia que hem d'obtenir totes les paraules úniques a l'arxiu. Si pugem a some_file.txt, i diguem que fem poma, plàtan, poma, poma, plàtan, si anem a imprimir totes les paraules úniques en aquest arxiu només ha de rebre poma i plàtan per imprimir. Si estalviem això, ara aquí tornarem a augmentar, php unique.php, i ta-da. Hem uniqued amb èxit l'arxiu. L'última part d'aquest problema se li demana que ordenar aquesta matriu abans d'imprimir perquè en aquest senzill exemple que acabem de fer vam tenir la sort en el sentit que l'arxiu que vam fer aquest exemple inventat amb pomes i plàtans. Va ser ordenat ja. Però l'ús de la funció de classificació simple que vostè pot ordenar una matriu, que és bastant enginyós. L'última cosa que volia parlar amb vosaltres sobre molt ràpid és que aquest tipus de PHP està molt bé, i és super útil saber que fer si mai ha de fer coses petites, ràpides programació. Per exemple, si he d'escriure un programa que, per exemple, posa a tothom en seccions que no aniré i escriure en C. Això serà llarg. Serà una mena de dolor, especialment si hi ha arxius involucrats, com vostès han vist. És tan bonic que només amb això molt codi aquí hem estat capaços d'extreure a través d'un arxiu, extraieu tots els valors únics i els imprimeix de tornada. No obstant això, per als seus treballs, dels seus projectes, si vostè està construint llocs web amb PHP és que el poder ens estem quedant nostres arxius PHP a través d'aquest intèrpret, i l'intèrpret està processant tot dins de les etiquetes PHP, deixant tota la resta intacte i escopint els resultats. Podem fer això per construir HTML mitjançant programació. Ara bé, si ens remuntem a l'especificació, l'últim problema a l'especificació parla d'aquesta idea de les concentracions i la creació d'un menú desplegable, que pot o no vol fer, depenent del que el projecte final està fent, que permet a l'usuari seleccionar d'una llista de totes les concentracions possibles seva única concentració. Ara, aquest és un tipus de dolor que escriure això i hem de fer tot això de forma manual, especialment quan vostè està tenint per assegurar que té tots els suports angulars en el lloc correcte i totes les cites en el lloc correcte, així que amb PHP es pot fer això mitjançant programació, i vostè pot fer això molt ràpidament. Anem a veure com es fa això. Anem a obrir un nou arxiu. Posarem en les nostres etiquetes PHP. Anem a cridar concentrations.php, i ara, quan vostè està fent això, una mica d'alguna cosa bona per pensar quan vostè està tractant de barrejar i combinar la seva PHP i l'HTML és determinar, d'acord, quina és la part que vull generar mitjançant programació? Quina és la part que pot generar mitjançant programació? És cert que es pot fer tot de la seva HTML dins dels blocs de PHP. Vostè pot repetir tot l'HTML com cadenes. Per exemple, si vull començar a fer les etiquetes seleccionades dins de PHP El que puc dir d'eco, per exemple seleccionar el nom = concentració, i després per sota que podria tenir una altra etiqueta eco o altre ressò anomenat tancar la selecció. Aquesta és una manera de fer-ho, perquè el que és a dir, literalment, farà és imprimir aquesta cadena quan s'executa a través de l'intèrpret PHP, de manera que el resultat serà HTML. Si guarda aquest arxiu, ja que és en aquests moments i corro concentrations.php php mira el que tinc. Tinc aquesta etiqueta de selecció obert prop. Si hagués de fer això i jo anàvem a salvar aquest resultat a un arxiu, dir, concentrations.html-espera, sembla que el l ha passat a l'altre costat- ara si m'obro aquí concentrations.html veieu que jo tinc un arxiu HTML vàlid. Això és una mica estrany? Estem usant PHP per crear HTML, crear HTML vàlid. La manera com ho estem fent és que estem només tenir la impressió de PHP el codi HTML que volem imprimir. Això és literalment com els llocs web de PHP estan funcionant. Quan vostè visita un lloc web que el manté a una mena alguna cosa, alguna cosa, alguna cosa dot com slash index.php l'equip està literalment cridar index.php, executar a través de l'intèrpret PHP, i tot el que surt escombraries que està enviant de tornada al navegador i dir hey, navegador, interpretar això com HTML. El millor és que pot ser un mal de escriure constantment ressò, ressò, ressò, ressò i tancar tot en cites com aquesta, així que si vols escriure el codi HTML que serà estàtic vostè mateix ho pot fer d'aquesta manera, posar fora, el tanca, i aquí només es col · loca dins de les etiquetes PHP que vostè coneix vol generar mitjançant programació, i en aquest cas es tracta de les etiquetes d'opció que són un mal de generar. Per exemple, es podria generar un miler d'etiquetes d'opció fent alguna cosa com això, $ i <1000, i + + i dient valor eco-option = $ crits, no puc fer això. Bé, anem a donar-li una oportunitat i veure què passa. $ I i després dir $ i