internetul Windows. Android

Citate PHP, citate unice, dublu, ecranare. Care este diferența dintre citatele unice și duble în PHP? Citate duble în PHP

Șirul este un set de caractere. În PHP, simbolul este același cu byte, înseamnă că este posibil exact 256 de caractere diferite. De asemenea, înseamnă că PHP nu are suport încorporat pentru Unicode "a. Unele suport Unicode" A furnizează funcțiile UTF8_ENCODE () și UTF8_DECODE ().

Notă: Nu există probleme dacă șirul este foarte ridicat. Nu există practic nici o restricție privind mărimea liniilor impuse de PHP, deci nu există absolut nici un motiv să vă faceți griji cu privire la lungimea lor.

Sintaxă

    Șirul poate fi determinat în trei moduri diferite.

Citate unice

Cea mai simplă modalitate de a determina șirul este să o încheiem în citate (simbol ").

Pentru a utiliza un singur citate în interiorul liniei, ca în multe alte limbi, acesta trebuie să fie prezis de un simbol al coastei inverse (\\), care este, protejând-o. Dacă naiba inversă de scufundare ar trebui să meargă înainte de o singură căpătare sau să fie la capătul liniei, trebuie să-l duplicați. Rețineți că dacă încercați să protejați orice alt caracter, caracteristica Reverse Chiuveta va fi de asemenea tipărită! Deci, de regulă, nu este nevoie să protejați linia oblică inversă.

Notă: În PHP 3, în acest caz, se va emite mesajul E_Notice la nivel.

Notă: Spre deosebire de alte două sintaxe, variabile și secvențe de ecranare pentru caractere speciale întâlnite în linii închise în citate unice nu sunt procesate.

Echo "Acesta este un șir simplu"; Echo "De asemenea, puteți introduce un simbol al unei linii noi în așa fel încât este normal"; // va ieși: o dată Arnold a spus: "Eu" voi fi înapoi "Echo" o dată Arnold a spus: "Eu sunt înapoi"; // eliminați: ați eliminat C: \\ *. *? Echo "ați eliminat C: \\\\ *. *?"; // eliminați: ați eliminat C: \\ *. *? Echo "ați eliminat C: \\ * *?"; // va ieși: nu se va introduce: \\ n linie nouă echo "Nu se va introduce: \\ n șir nou"; // va ieși: $ Expand variabile, de asemenea, $ fie nu sunt substituite cu ecou "variabile de expandare $, de asemenea, $ fie nu sunt substituite";

Citate duble

Dacă șirul este închis în ghilimele duble ("), PHP recunoaște un număr mai mare de secvențe de control pentru caractere speciale:

Tabelul 11-1. Secvențe de control

Repetăm \u200b\u200bdacă doriți să multiplicați orice alt caracter, caracteristica Reverse Chiuveta va fi, de asemenea, tipărită!

Dar cea mai importantă proprietate a rândurilor în ghilimele duble este prelucrarea variabilelor. Vedeți mai multe detalii: Procesarea rândului.

Heredoc.

O altă modalitate de a defini șirurile este utilizarea de heredoc-sintaxă ("

Identificatorul de închidere trebuie să înceapă în prima coloană a șirului. În plus, identificatorul trebuie să corespundă acelorași reguli de numire ca toate celelalte etichete din PHP: conțin doar caractere alfanumerice și un semn de subliniere și ar trebui să înceapă cu non-merpure sau subliniere.

Atenţie

Este foarte important să rețineți că șirul cu identificatorul de închidere nu conține alte caractere, cu excepția, eventual, punct și virgulă (;). Aceasta înseamnă că identificatorul nu trebuie introdus cu o liniuță și că nu pot exista lacune sau file ale filei înainte sau după un punct și virgulă. De asemenea, este important să înțelegem că primul caracter în fața identificatorului de închidere ar trebui să fie un simbol al unui nou șir definit în sistemul dvs. de operare. De exemplu, pe Macintosh este \\ r.

Dacă această regulă este spartă și identificatorul de închidere nu este "pur", se crede că identificatorul de închidere lipsește și PHP va continua să caute. Dacă în acest caz identificatorul de închidere corect nu va fi găsit, acesta va determina o eroare în procesarea cu un număr de șir la sfârșitul scriptului.

Textul Heredoc se comportă în același mod ca un rând în citate dublu, în timp ce nu le are. Aceasta înseamnă că nu aveți nevoie să protejați citatele în Heredoc, dar puteți utiliza în continuare secvențele de control de mai sus. Variabilele sunt procesate, dar folosind variabile complexe în interiorul heredocului ar trebui, de asemenea, să fie atenți ca atunci când lucrați cu linii.

Exemplul 11-2. Un exemplu de definiție a unui șir de heredoc

$ Str \u003d.<<foo \u003d "foo"; $ acest-\u003e bar \u003d matrice ("bar1", "bar2", "bar3"); )) $ foo \u003d nou foo (); $ nume \u003d "mina"; Ecou.<<foo. Acum aduc ($ foo-\u003e bar). Aceasta ar trebui să emită litera de titlu "A": \\ x41 eot;

Notă: Suportul Heredoc a fost adăugat la PHP 4.

Prelucrarea variabilelor

Dacă șirul este definit în ghilimele duble sau cu heredoc, variabilele din interiorul acesteia sunt procesate.

Există două tipuri de sintaxă: simplă și complexă. Sintaxa simplă este mai ușoară și convenabilă. Acesta permite procesarea variabilă, valoarea matricei (matricei) sau proprietățile obiectului (obiect).

Sintaxa complexă a fost introdusă în PHP 4 și poate fi recunoscută pe paranteze curbate care înconjoară expresia.

Sintaxă simplă

Dacă interpretul îndeplinește semnul dolarului ($), captează atât de multe personaje cât mai mult posibil pentru a forma numele variabilei corecte. Dacă doriți să definiți cu precizie sfârșitul numelui, încheiați un nume variabil în paranteze Curly.

$ bere \u003d "Heineken"; Echo "gustul de bere" este mare "; // lucrări," "" Acesta este un caracter incorect pentru numele ecoului "El a băut o variabilă de $ Beers"; // nu funcționează, "S" este un personaj credincios pentru numele variabilei ecologice "El a băut niște $ (bere) S"; // ecou "a băut unele ($ bere) s"; // lucrări

Un element de matrice (matrice) sau obiect obiect (obiect) poate fi, de asemenea, procesat. În indicirile de matrice, brațul pătratului de închidere (]) denotă sfârșitul definiției indicelui. Pentru proprietățile obiectului, aceleași reguli se aplică ca și pentru variabilele simple, deși este imposibil de truc, ca și în cazul variabilelor.

// Aceste exemple sunt în mod specific despre utilizarea matricei din interiorul // linii. În afara rândurilor, introduceți întotdeauna cheile de șir // în citate și nu utilizați șiruri de caractere (paranteze). // să arătăm toate erorile error_reporting (e_all); $ Fructe \u003d matrice ("căpșuni" \u003d\u003e "roșu", "banană" \u003d\u003e "galben"); // lucrări, dar observați că în afara citatelor liniei funcționează într-un alt ecou "o banană este $ fructe". // eco "o banană este ($ fructe [" banane "])."; // Lucrări, dar PHP, după cum este descris mai jos, căutări de primăvară // banane constante. Echo "O banană este ($ fructe)."; // nu funcționează, utilizați paranteze curbate. Acest lucru va provoca o eroare de procesare. Echo "O banană este $ Fructe [" Banana "]."; // Echo "o banană este" funcționează. $ Fructe ["banană"]. "."; // rularea ecoului "Acest pătrat este $ Square-\u003e Lățimea de metri larg". // Nu funcționează. Pentru soluție, consultați sintaxa complexă. Echo "Acest pătrat este $ Square-\u003e Width00 centimetri lentă".

Pentru ceva mai dificil, trebuie să utilizați sintaxa complexă.

Sintaxă complexă (figurată)

Se numește dificil, deoarece este dificil în înțelegere, ci pentru că vă permite să utilizați expresii complexe.

De fapt, puteți activa orice valoare în numele numelui din șirul cu această sintaxă. Doar scrieți expresia în același mod ca în afara liniei, apoi încheiați-o în (și). Din moment ce nu puteți proteja "(", această sintaxă va fi recunoscută numai când $ ar trebui să fie direct pentru (. (Utilizați "(\\ $" sau "($" pentru a afișa "($"). Mai multe exemple explicative:

// să arătăm toate erorile error_reporting (e_all); $ Mare \u003d "fantastic"; // nu funcționează, elimină: acesta este (fantastic) ecou "Acesta este ($ mare)"; // lucrări, retrageți: acesta este un ecou fantastic "Acesta este ($ mare)"; Echo "Acesta este $ (mare)"; // rulează ecou "Această lățime pătrată ($ pătrat-\u003e lățime) 00 centimetri."; // rularea ecoului "funcționează: ($ arr)"; // Este incorect din același motiv ca $ foo este incorect afară // rând. Cu alte cuvinte, va funcționa în continuare, // dar din moment ce PHP caută mai întâi o constantă foo, o va numi // E_notice eroarea de nivel (constanță nedefinită). Echo "Este greșit: ($ arr)"; // Lucrări. Atunci când se utilizează matrice multidimensionale, în interiorul // linii folosesc întotdeauna brațele de ecou Curly "Funcționează: ($ arr [" foo "])"; // Lucrări. Echo "funcționează:". $ arr ["foo"]; ECHO "Puteți scrie chiar ($ obj-\u003e valori-\u003e nume)"; Echo "Aceasta este valoarea unei variabile numite $ nume: ($ ($ nume))";

Accesul la simbolul în șir și schimbarea acestuia

Simbolurile în linii pot fi utilizate și modificate prin definirea offsetului în raport cu începutul șirului, pornind de la zero, în paranteze curbate după rând.

Notă: Pentru a vă asigura compatibilitatea înapoi, aveți în continuare posibilitatea de a utiliza suportul de matrice pentru aceleași obiective. Cu toate acestea, începând cu PHP 4, această sintaxă este nedorită la utilizare.

Exemplul 11-3. Câteva exemple de șir

// obținerea primului personaj de linie $ str \u003d "Acesta este un test."; $ mai întâi \u003d $ str (0); // obținerea celei de-a treia linie de caractere $ 3 \u003d $ str (2); // obținerea ultimului caracter al liniei $ str \u003d "Este încă un test."; $ Ultimă \u003d $ str (strlen ($ str) -1); // schimbarea ultimului simbol al liniei $ str \u003d "uita la mare"; $ Str (strlen ($ str) -1) \u003d "i";

Caracteristici utile și operatori

Rândurile pot fi combinate cu operatorul. "" (punct). Vă rugăm să rețineți operatorul de adăugare "+" nu funcționează aici. Pentru mai multe informații, consultați operatorii de șir.

Pentru modificarea șirurilor, există multe caracteristici utile.

Funcțiile principale sunt descrise în secțiunea funcțiilor de șir, funcțiile expresiilor regulate pentru căutarea și înlocuirea avansată (în două părți: Perl și POSIX Avansate).

Există, de asemenea, funcții pentru șirurile de adrese URL și funcții pentru corzi de criptare / decriptare (MCRYPT și MHASH).

În cele din urmă, dacă încă nu ați găsit ceea ce căutați, consultați funcțiile pentru tipul simbolic.

Conversia la șir

Puteți converti o valoare la un șir utilizând șirul (șir) sau funcția Strval (). În expresii în care este necesar șirul, conversia are loc automat. Acest lucru se întâmplă atunci când utilizați funcțiile Echo () sau Print () sau când comparați valoarea unei variabile cu un șir. Citirea secțiunilor tipurilor și manipulării tipurilor vor face ca următoarele să fie mai ușor de înțeles. Vedeți și SetType ().

Boolean (boolean) Valoarea adevărată este transformată în șirul "1", iar valoarea falsă este reprezentată ca "" (șir gol). În acest fel, puteți converti valorile în ambele direcții - de la tipul boolean într-un șir și invers.

Un număr întreg (întreg) sau un punct plutitor (float) este transformat într-un șir reprezentat de numărul constând din numerele sale (inclusiv un indicator al gradului pentru numere de puncte plutitoare).

Arrays sunt întotdeauna convertite în șirul "matrice", astfel încât să nu puteți afișa conținutul matricei (matricei) utilizând ECHO () sau Imprimare () pentru a afla ce conține. Pentru a vizualiza un element, trebuie să faceți ceva de genul unui ECHO $ \u200b\u200bARR ["FOO"]. Vedeți mai jos Sfaturi despre cum să afișați / vizualizați tot conținutul.

Obiectele sunt întotdeauna convertite în șirul de obiect ". Dacă doriți să afișați valoarea obiectului membru al obiectului (obiect) pentru a depana, citiți următoarele paragrafe. Dacă doriți să obțineți numele clasei obiectului dorit, utilizați get_class ().

Resursele sunt întotdeauna transformate în șiruri cu structura "Resurse ID # 1", unde 1 este un număr unic de resurse (resursă) alocat în PHP în timpul executării. Dacă doriți să obțineți un tip de resurse, utilizați.

Null este întotdeauna transformat într-un șir gol.

După cum ați văzut mai sus, producția de matrice, obiecte sau resurse nu vă oferă informații utile despre valorile în sine. O modalitate mai adecvată de a afișa valorile pentru depanare este utilizarea funcțiilor Print_R () și Var_dump ().

De asemenea, puteți converti valorile PHP în șirurile de stocare constantă. Această metodă se numește serializare și poate fi efectuată utilizând funcția Serialize (). În plus, dacă aveți un suport WDDX în setarea dvs. PHP, puteți serializa valori PHP în structura XML.

Conversia rândului în numere

Dacă șirul este recunoscut ca o valoare numerică, valoarea rezultată și tipul este definită după cum se arată mai jos.

Șirul va fi recunoscut ca float dacă conține oricare dintre caractere "," e "sau" e ". În caz contrar, acesta va fi definit ca un întreg.

Valoarea este determinată de partea inițială a liniei. Dacă șirul începe cu o valoare numerică corectă, această valoare va fi utilizată. În caz contrar, valoarea va fi 0 (zero). O valoare numerică anterioară este una sau mai multe cifre (care pot conține un punct zecimal), la cererea semnului prezentat, urmat de un indicator opțional. Indicatorul de grad este "e" sau "e" cu unul ulterior sau mai multe numere.

$ Foo \u003d 1 + "10.5"; // $ foo este float (11.5) $ foo \u003d 1 + "-1,3e3"; // $ foo este flotor (-1299) $ foo \u003d 1 + "bob-1.3e3"; // $ foo este un număr întreg (1) $ foo \u003d 1 + "bob3"; // $ foo este un număr întreg (1) $ foo \u003d 1 + "10 porci mici"; // $ foo este întreg (11) $ foo \u003d 4 + "10,2 piggii mici"; // $ foo este float (14.2) $ foo \u003d "10,0 porci" + 1; // $ foo este flotor (11) $ foo \u003d "10,0 porci" + 1.0; // $ foo este flotor (11)

Pentru mai multe informații despre această conversie, consultați secțiunea Documentație Unix Strod (3).

Dacă doriți să testați oricare dintre exemplele acestei partiții, puteți copia și lipi și linia următoare pentru a vedea ce se întâmplă:

Echo "\\ $ foo \u003d\u003d $ foo; Tip:". Gettype ($ foo). "
\\ n ";

Nu vă așteptați să primiți un cod de simbol prin transformarea acestuia într-un număr întreg (după cum puteți face, de exemplu, în C). Pentru a converti caracterele la codurile și înapoi, utilizați ordinea () și

Nu sunt un expert în programarea PHP, dar mă confund puțin, de ce văd un cod în PHP cu un șir încheiat în citate dublă și uneori în dublu.

Știu doar că v.net sau limbă C, dacă este în citate unică, înseamnă că acesta este un simbol, nu un șir.

Decizie

Ce trebuie sa stii

$ a \u003d "nume"; $ B \u003d "$ a"; \u003d\u003d "Numele meu" $ c \u003d "$ a"; ! \u003d "Numele meu"

În PHP, oamenii folosesc citate unice pentru a determina un șir constant, de exemplu "A", "Numele meu", "ABC XYZ" atunci când utilizați citate duble pentru a determina un șir care conține un identificator, cum ar fi "A $ B $ C $ D ",

Și încă ceva,

Echo "Numele meu";

mai rapid decât

Echo "Numele meu";

Echo "My". $ a;

mai incet decat

Echo "$ a";

Acest lucru este valabil pentru alte rânduri utilizate.

În PHP, textul în ghilimele unice este considerat ca o valoare a șirului, iar textul din ghilimele duale va analiza variabilele prin înlocuirea și prelucrarea valorii acestora.

$ test \u003d "variabil"; Echo "Hello MR $ Testul"; // ieșirea ar fi: Bună ziua Dle Variable Echo "Hello MR $ Testul"; // ieșirea ar fi: Hello MR $ Testul

Aici, cotația dublă analizează valoarea, iar cotația unică este considerată ca o valoare a șirului (fără a parsa o variabilă de testare $.)

Ambele tipuri de caractere imbricate sunt rânduri. Un tip de citate este convenabil de utilizat pentru încheierea unui alt tip de cotație. "" "Și, de asemenea," "", cea mai mare diferență dintre tipurile de citate este că referințele la identificatorii imbricați sunt înlocuiți în interiorul citatelor duble și nu în interiorul citatelor unice.

cometariu: În PHP 7.0.0 pe platforme pe 64 de biți nu există restricții limită realizabile pentru lungimile șirurilor, în sistemele pe 32 de biți și în versiunile anterioare PHP, liniile nu pot fi mai mari de 2 GB (2147483647 octeți).

Sintaxă

Șirul poate fi determinat de patru moduri diferite:

  • Citate unice
  • Citate duble
  • NOWDOC Sintaxă (începând cu PHP 5.3.0)

Citate unice

Cea mai simplă modalitate de a identifica un șir este de ao concluziona în ghilimele unice (simbol " ).

Pentru a utiliza citate unice în interiorul șirului, scor-o cu un strat invers ( \ ). Dacă trebuie să scrieți o reversă, duplicați-o ( \\ ). Toate celelalte cazuri de aplicare a stratului invers vor fi interpretate ca simboluri convenționale: aceasta înseamnă că dacă încercați să utilizați alte secvențe de control, cum ar fi \\ R. sau \\ N.Ei vor fi derivați așa cum este în loc de un comportament special.

ecou. "Acesta este un șir simplu";

ecou. "De asemenea, puteți introduce în șiruri de caractere
simbolul noua linie ca aceasta
asta este normal"
;

// Afișaje: o dată Arnold a spus: "Eu voi reveni"
ecou. "Odată, ARNOLD a spus:" Eu sunt înapoi ";

Ecou. "Ați eliminat C: \\\\ *. *?";

// Afișaje: ați eliminat C: \\ * *?
eCHO "Ați eliminat C: \\ *. *?" ;

// Afișaje: Nu va fi implementat: \\ n linie nouă
ecou. "Nu va fi implementat: \\ n nou șir";

// Afișaje: variabile $ Expand, de asemenea, $ fie nu se desfășoară
ecou. "$ Expand variabile, de asemenea, $ fie nu se desfășoară";
?>

Citate duble

Dacă șirul este închis în ghilimele duble ("), PHP recunoaște următoarele secvențe de control ale caracterelor speciale:

Secvențe de control
Secvenţă Valoare
\\ N. linie nouă (LF sau 0x0A (10) în ASCII)
\\ R. transportul de întoarcere (CR sau 0x0D (13) în ASCII)
\\ T. fila orizontală (HT sau 0x09 (9) în ASCII)
\\ V. (VT sau 0x0b (11) în ASCII) (cu PHP 5.2.5)
\\ E. semnul de evacuare (ESC sau 0x1B (27) în ASCII) (cu PHP 5.4.4)
\\ F. feed de alimentare (FF sau 0x0c (12) în ASCII) (cu PHP 5.2.5)
\\ reverse oblic naible.
\$ semnul dolarului
\" citate duble
\{1,3} Secvența de simboluri corespunzătoare expresiei regulate a simbolului în sistemul numeric octal care se scurge în tăcere pentru a se potrivi în octeți (adică "\\ 400" \u003d\u003d\u003d "\\ 000")
\\ x (1,2) Secvența de caractere corespunzătoare expresiei regulate a simbolului într-un sistem de număr hexazecimal
\\ U (+) Secvența de caractere corespunzătoare expresiei regulate a simbolului Unicode, care este afișată în șirul din vizualizarea UTF-8 (adăugată la PHP 7.0.0)

Ca și într-un șir încheiat în ghilimele unice, screening-ul oricărui caracter va afișa, de asemenea, simbolul de screening. Până la PHP 5.1.1, Reverse Lay \\ ($ var) Nu este tipărită.

Heredoc.

A treia modalitate de a defini șirurile este utilizarea de heredoc-sintaxă: <<< . După acest operator, trebuie să specificați identificatorul, apoi traducerea rândului. După aceea, șirul în sine merge și apoi același identificator care închide inserția.

Linia ar trebui să Începeți cu un identificator de închidere, adică El trebuie să stea în coloana de primă linie. În plus, identificatorul trebuie să respecte aceleași reguli de numire, deoarece toate celelalte etichete din PHP: conține numai caractere alfanumerice și un semn de subliniere și nu trebuie să înceapă cu numerele (subdesența inferioară).

Atenţie

Este foarte important să rețineți că rândul cu identificatorul de închidere nu trebuie să conțină alte caractere, cu excepția unui punct și virgulă ( ; ). Aceasta înseamnă că identificatorul nu ar trebui să fie introduse cu liniuță Și că nu pot exista lacune sau file de file înainte sau după un punct cu o virgulă. De asemenea, este important să înțelegem că primul caracter în fața identificatorului de închidere ar trebui să fie un simbol al unui nou șir definit în sistemul dvs. de operare. De exemplu, în sistemele Unix, inclusiv MacOS, acest lucru \\ N.. După identificatorul de închidere, o nouă linie ar trebui, de asemenea, să înceapă imediat.

Dacă această regulă este spartă și identificatorul de închidere nu este "pur", se crede că identificatorul de închidere lipsește și PHP va continua să caute. Dacă în acest caz identificatorul corect de închidere nu va fi găsit, va provoca o eroare de parsare cu un număr de șir la sfârșitul scriptului.

Exemplu # 1 Exemplu de sintaxă incorectă

clasa foo (
Public $ bar \u003d<<bar
Eot;
// Pencing înainte de identificatorul de închidere este inacceptabil
}
?>

Exemplul # 2 Exemplu de sintaxă corectă

clasa foo (
Public $ bar \u003d<<bar
Eot;
}
?>

Heredoc nu poate fi folosit pentru inițializarea câmpurilor de clasă. Începând cu PHP 5.3, această restricție se aplică numai variabilelor care conțin heredoc în sine.

Textul Heredoc se comportă în același mod ca un rând în citate dublu, în timp ce nu le are. Aceasta înseamnă că nu aveți nevoie să protejați citatele în Heredoc, dar puteți utiliza în continuare secvențele de control de mai sus. Variabilele sunt procesate, dar folosind variabile complexe în interiorul heredocului ar trebui, de asemenea, să fie atenți ca atunci când lucrați cu linii.

Exemplu # 3 Exemplu de definiție aicioc-rând

$ Str \u003d.<<String eșantion,
acoperind mai multe linii
folosind sintaxa Heredoc.
Eod;

Clasa foo.
{
Var $ foo;
Var $ bar;

Funcție __construct ()
{
$ acest -\u003e foo \u003d "foo";
$ acest -\u003e
}
}

$ foo \u003d nou foo ();
$ nume \u003d "nume";

ecou.<<Numele meu este "$ nume". I tastați $ foo -\u003e foo .
Acum iau
($ Foo -\u003e bar [1]) .
Aceasta ar trebui să elimine litera de titlu "A": \\ x41
Eot;
?>

Numele meu este "NAME". Am imprimat foo. Acum, am strămuta bar2. Aceasta ar trebui să elimine litera de titlu "A": a

De asemenea, este posibilă utilizarea sintaxei Heredoc pentru transmiterea datelor prin argumentele funcției:

Pornind de la versiunea 5.3.0, a devenit posibilă încorporarea variabilelor statice și a proprietăților / constantelor clasei utilizând sintaxa Heredoc:

Exemplu # 5 Utilizarea Heredoc pentru incidența variabilă statică

// variabile statice
funcție foo ()
{
Static $ bar \u003d<<Nu e nimic aici ...
Eticheta;
}

// constante / proprietăți de clasă
clasa foo.
{
const bar \u003d.<<Un exemplu de utilizare constantă
Foobar;

Public $ baz \u003d<<Un exemplu de utilizare a câmpului
Foobar;
}
?>

Începând cu PHP 5.3.0, puteți înconjura și identificatorul Heredoc cu citate duble:

Nowdoc.

Nowdoc este același pentru șiruri de caractere în citate unice, cum ar fi Welldoc pentru linii în citate duble. Nowdoc arata ca Heredoc, dar in interiorul asta nu se efectuează nicio substituție. Acest design este ideal pentru introducerea unui cod PHP sau a altor blocuri de text mari fără a fi nevoie de ecranarea acestuia. În acest sens, el este un pic cam ca designul SGML Faptul care declară blocul de text care nu este destinat procesării.

NOWDOC indică aceeași secvență <<< care este utilizat în Heredoc, dar identificatorul ulterior următor este citate unică, de exemplu, <<<"EOT" . Toate condițiile care operează pentru identificatorii Heredoc sunt, de asemenea, valabile pentru NOWDOC, în special cele aparificate identificatorul de închidere.

Exemplul # 7 Un exemplu de utilizare a acum

ecou.<<<"EOD"
Exemplu de text
ocupând mai multe linii
folosind sintaxa Nowdoc. Inversoarele se prelucrează întotdeauna literalmente,
de exemplu, \\\\ și \\ ".
Eod;

Rezultatul acestui exemplu:

Un exemplu de text care ocupă mai multe linii utilizând sintaxa Nowdoc. Accidentele inverse sunt întotdeauna procesate literal, de exemplu, \\\\ și \\ ".

Exemplu # 8 Nowdoc String Citând exemplu cu variabile

/ * Un exemplu mai complex cu variabilele. * /
clasa foo.
{
Public $ foo;
Public $ Bar;

Funcție __construct ()
{
$ acest -\u003e foo \u003d "foo";
$ acest -\u003e bar \u003d matrice ("bar1", "bar2", "bar3");
}
}

$ foo \u003d nou foo ();
$ nume \u003d "nume";

ecou.<<<"EOT"
Numele meu este "$ nume". I tastați $ foo-\u003e foo.
Acum am tip ($ foo-\u003e bar).
Acest lucru nu ar trebui să retragă titlul "A": \\ x41
Eot;
?>

Rezultatul acestui exemplu:

Numele meu este "$ nume". I tastați $ foo-\u003e foo. Acum am tip ($ foo-\u003e bar). Acest lucru nu ar trebui să retragă titlul "A": \\ x41

Exemplu # 9 Exemplu de utilizare a datelor statice

clasa foo (
Public $ bar \u003d<<<"EOT"
bar
Eot;
}
?>

cometariu:

Suportul NOCOC a fost adăugat la PHP 5.3.0.

Prelucrarea variabilelor

Dacă șirul este specificat în ghilimele duble sau cu heredoc, variabilele din interiorul acesteia sunt procesate.

Există două tipuri de sintaxă: simplă și complexă. Sintaxa simplă este mai ușoară și convenabilă. Permite procesarea variabilă, valoarea matricei ( array.) sau proprietățile obiectului ( obiect.) cu un efort minim.

Sintaxa complexă poate fi determinată pe paranteze curbate care înconjoară expresia.

Sintaxă simplă

Dacă interpretul îndeplinește semnul dolarului ( $ ), captează atât de multe personaje, deoarece este posibil să se formeze numele corect al variabilei. Dacă doriți să definiți cu precizie sfârșitul numelui, încheiați un nume variabil în paranteze Curly.

$ suc \u003d "Apple";

echo "El a băut un suc de suc de suc." . Php_eol;

// incorect. "S" este un caracter credincios pentru numele variabilei, dar variabila are numele $ suc.
echo "El a băut niște sucuri din sucuri de $." ;

// corect. Scăderea strictă a numelui variabili folosind paranteze:
echo "El a băut niște sucuri din $ (suc) s." ;
?>

Rezultatul acestui exemplu:

A băut un suc de mere. El a băut niște suc făcut din. El a băut niște sucuri din mere.

Un element de matrice poate fi procesat în mod similar ( array.) sau proprietatea obiectului ( obiect.). În indicii de închidere a matricei de închidere ( ] ) Indică sfârșitul definiției indexului. Pentru proprietățile obiectului, aceleași reguli se aplică ca și pentru variabilele simple.

Exemplu # 10 Exemplu Sintaxă simplă

defini ("koolaid", "koolaid1");
$ sucuri \u003d matrice ("Apple", "portocal", "koolaid1" \u003d\u003e "violet");

echo "El a băut niște sucuri de doliu [0]." . Php_eol;
echo "El a băut niște jiice [1] suc." . Php_eol;
echo "El a băut niște sucuri de $ [koolaid1] suc." . Php_eol;

oameni de clasă (
Public $ John \u003d "John Smith";
Public $ Jane \u003d "Jane Smith";
Public $ robert \u003d "robert paulsen";

Public $ smith \u003d "Smith";
}

$ oameni \u003d oameni noi ();

echo "$ oameni -\u003e John a băut niște Jices [0] suc." . Php_eol;
echo "Oamenii -\u003e John a spus apoi Bună ziua oamenilor -\u003e Jane". . Php_eol;
echo "$ oameni -\u003e soția lui John a salutat $ persoane -\u003e robert." PHP_EOL;
echo "$ oameni -\u003e Robert a salutat cei doi oameni -\u003e Smiths." ; // nu functioneaza
?>

Rezultatul acestui exemplu:

A băut un suc de mere. A băut niște suc de portocale. A băut un suc purpuriu. John Smith a băut niște suc de mere. John Smith a zis apoi Bună ziua lui Jane Smith. Soția lui John Smith a salutat pe Robert Paulsen. Robert Paulsen a salutat pe cei doi.

PHP 7.1.0 A fost adăugat suport negativ indici numerici.

Exemplu # 11 Indicii numerici negativi

$ String \u003d "șir";
ecou. "Simbolul cu indicele -2 este egal$ String [- 2]. ", Php_eol;
$ string [- 3] \u003d "o";
ecou. "Schimbarea simbolului în poziția -3 pe" O "oferă următorul șir:$ String ", php_eol;
?>

Rezultatul acestui exemplu:

Simbolul cu indicele -2 este n. Schimbarea simbolului în poziția -3 pe "O" dă următoarea linie: puternică

Pentru ceva mai complex, utilizați sintaxa complexă.

Sintaxă complexă (figurată)

Se numește dificil, deoarece este dificil în înțelegere, ci pentru că vă permite să utilizați expresii complexe.

Orice variabilă scalară, un element de matrice sau o proprietate obiect afișată într-un șir poate fi prezentată în linie prin această sintaxă. Doar scrieți expresia, precum și în afara liniei, apoi introduceți-o înăuntru { și } . În măsura în care { nu pot fi protejate, această sintaxă va fi recunoscută numai când $ Ar trebui să fie direct de la { . Utilizare {\$ la imprimare {$ . Câteva exemple explicative:

// Arătați toate erorile
error_reporting (e_all);

$ Mare \u003d "mare";

// nu funcționează, afișează: ea (mare)
echo "acest ($ mare)";

// Lucrări, Afișaje: Este minunat
echo "acest ($ mare)";

// Lucrări
ecou. "Acest pătrat lățime($ Pătrat -\u003e lățime) 00 centimetri. ";

// lucrări, cheile închise în citate, lucrează numai cu sintaxa de brak
echo "Lucrează: ($ arr [" cheie "])";

// Lucrări
echo "Lucrează: ($ ARR [4] [3])";

// este incorectă din același motiv ca $ foo afară
// Linii. Cu alte cuvinte, va funcționa în continuare,
// Dar din moment ce PHP caută mai întâi o constantă foo, va provoca
// Nivelul de eroare e_notice (constant nedefinit).
ecou. "Nu este corect:($ Arr [foo] [3]) ";

// Lucrări. Când utilizați matrice multidimensionale în interior
// linii utilizează întotdeauna paranteze curbate
echo "Lucrează: ($ arr [" foo "] [3])";

// Lucrări.
echo "funcționează:". $ arr ["foo"] [3];

ecou. "De asemenea, funcționează:($ Obj -\u003e valori [3] -\u003e nume) ";

ecou. "Aceasta este valoarea unei variabile numite$ Nume: ($ ($ nume)) ";

ecou. "Aceasta este valoarea unei variabile după nume care returnează funcția GetName ():($ (GetName ())) ";

ecou. "Aceasta este valoarea unei variabile după nume care returnează \\ $ Object-\u003e GetName ():($ ($ Obiect -\u003e getname ())) ";

// nu funcționează, afișează: acesta este ceea ce returnează GetName (): (GetName ())
ecou. "Acesta este ceea ce returnează getname (): (GetName ())";
?>

Cu această sintaxă, este de asemenea posibilă accesarea proprietăților obiectului din interiorul liniilor.

clasa foo (
Var $ bar \u003d "eu sunt bar". ;
}

$ foo \u003d nou foo ();
$ Bar \u003d "bar";
$ Baz \u003d Array ("Foo", "Bar", "Baz", "quux");
echo "($ foo -\u003e $ bar) \\ n";
echo "($ foo -\u003e ($ Baz [1])) \\ n";
?>

Rezultatul acestui exemplu:

Sunt bar. Sunt bar.

cometariu:

Funcții, apeluri de metode, variabile de clasă statică, precum și constantele clasei care rulează în interior {$} Începând cu versiunea PHP 5. Cu toate acestea, valoarea specificată va fi procesată ca denumirea variabilei în același context ca șirul în care este determinat. Folosind bretele cu un singur bucat ( {} ) Nu va funcționa pentru a accesa valorile funcțiilor, metodelor, constantelor de clasă sau a variabilelor statice.

// Arătați toate erorile
error_reporting (e_all);

bere de clasă (
const softdrink \u003d "rootbeer";
Public static $ ale \u003d "IPA";
}

$ rootbeer \u003d "A & W";
$ IPA \u003d "Alexander Keith \\" S ";

// funcționează, afișează: Aș dori A & W
echo "Aș dori ($ (Beers :: Softdrink)) \\ n";

// funcționează prea, afișează: Aș vrea ca Alexander Keith "
echo "Aș dori $ (Beers :: $ ale)) \\ n";
?>

Accesul la simbolul în șir și schimbarea acestuia

Simbolurile în linii pot fi utilizate și modificate prin definirea offsetului în raport cu începutul șirului, începând de la zero, în paranteze pătrate după un șir, de exemplu, $ str. Gândiți-vă la linia în acest scop, ca o serie de caractere. Dacă aveți nevoie să obțineți sau să înlocuiți mai mult de 1 simbol, puteți utiliza funcții substanță () și substr_replace ().

cometariu: Începând cu PHP 7.1.0, sunt acceptate valori negative de deplasare. Ele definesc offset de la capătul liniei. Anterior, compensarea negativă a provocat o eroare la nivel E_notice. Când citiți (returnând un șir gol) sau E_warning. Când înregistrați (lăsând șirul neschimbată).

cometariu: Simbolul din rând poate fi, de asemenea, tratat cu paranteze curbate, de exemplu, $ str (42).

Atenţie

Încercarea de a scrie la offset peste limitele șirului va completa șirul cu spații înainte de această offset. Tipurile NEUM vor fi convertite în întregime. Tipul de deplasare nevalid va cauza o eroare la nivel E_warning.. Numai primul simbol al rândului este utilizat. Începând cu PHP 7.1.0, atribuirea unui șir gol va provoca o eroare fatală. În acest caz, byte zero (null) a fost atribuită.

Atenţie

Rândurile din PHP reprezintă pe plan local de octeți. Ca urmare, accesul sau modificarea șirului de deplasare este nesigură în ceea ce privește codificarea multibmetă și trebuie efectuată numai cu șiruri în codificări cu o singură octet, cum ar fi, de exemplu, ISO-8859-1.

cometariu: Începând cu PHP 7.1.0, utilizarea unui indice gol determină o eroare fatală, mai devreme în acest caz șirul a fost transformat într-o matrice fără avertisment.

Exemplu # 12 Exemple multiple de rând

// obțineți primul simbol șir de caractere
$ str \u003d "Acesta este un test." ;
$ primul \u003d $ str [0];

// obțineți simbolul al treilea șir
$ al treilea \u003d $ str [2];

// obțineți ultimul simbol șir de caractere
$ str \u003d "Aceasta este încă un test." ;
$ Ultimii \u003d $ str [strlen ($ st) - 1];

// schimbarea ultimului simbol de caractere
$ str \u003d "uite la mare";
$ Str [strlen ($ str) - 1] \u003d "e";

?>

Începând cu PHP 5.4, decalajul din șir ar trebui să fie setat fie un număr întreg, fie un șir care conține numere, altfel va fi emis un avertisment. Anterior offset, rând specificat de tip "Foo", fără avertismente, a fost transformată în 0 .

Exemplul # 13 Diferențele dintre PHP 5.3 și PHP 5.4

$ str \u003d "abc";

Var_dump ($ str (1 "]);
var_dump (izset ($ str ["1"]));

Var_dump ($ str ["1.0"]);
var_dump (izset ($ str ["1.0"]);

Var_dump ($ str ("x"]);
var_dump (Isset ($ str ["x"]));

Var_dump ($ str (1x "]);
var_dump (izset ($ str ["1x"]));
?>

Rezultatul acestui exemplu în PHP 5.3:

string (1) "B" BOOL (TRUE) String (1) "B" String Bool (TRUE) (1) "A" Bool (TRUE) (1) "B" Bool (TRUE)

Rezultatul acestui exemplu în PHP 5.4:

string (1) "B" BOOL (TRUE) AVERTISMENT: String ilegal Offset "1.0" în /tmp/t.php pe linia 7 String (1) "B" BOOL (FALSE) AVERTISMENT: String ilegal Offset "X" în / Tmp / t.php pe linia 9 șir (1) "un șir Bool (fals) (1)" b "bool (fals)

cometariu:

O încercare de a accesa variabilele altor tipuri (excluzând matrice sau obiecte care implementează anumite interfețe) cu sau {} silențios întoarcere NUL.

cometariu:

PHP 5.5 Adăugat suport pentru accesul la simboluri în literale de șir folosind sintaxa sau {} .

Pentru modificarea șirurilor, există multe caracteristici utile.

Funcțiile principale sunt descrise în secțiunea Funcții de șir și pentru căutarea și înlocuirea extinsă - funcțiile expresiilor regulate compatibile perl.

Conversia la șir

Valoarea poate fi transformată într-un șir prin aducerea (Şir)sau funcții strval (). În expresii în care este necesar șirul, conversia are loc automat. Acest lucru se întâmplă atunci când utilizați funcții. ecou. sau imprimare.Sau când valoarea variabilei este comparată cu șirul. Citirea secțiunilor tipurilor și manipulării tipurilor vor face ca următoarele să fie mai ușor de înțeles. Vezi si settype ().

Arrays sunt întotdeauna transformate într-un șir "Array"Deci, nu puteți afișa conținutul matricei ( array.) Folosind. ecou. sau imprimare.Pentru a afla ce conține. Pentru a vizualiza un element separat, utilizați ceva de genul eCHO $ \u200b\u200bARR ["FOO"]. Vedeți mai jos Sfaturi despre cum să afișați / vizualizați tot conținutul.

Pentru a converti un tip variabil "Obiect" în tipul. Şir Metoda Magic __Tostring folosit.

Valoare NUL Convertiți întotdeauna într-un șir gol.

După cum ați putut vedea mai sus, conversia directă în șirul de matrice, obiecte sau resurse nu oferă informații utile despre valorile în sine, cu excepția tipurilor lor. O modalitate mai potrivită de ieșire a valorilor pentru depanarea funcțiilor de utilizare print_r () și var_dump ().

Majoritatea valorilor din PHP pot fi transformate într-un șir de stocare constantă. Această metodă se numește serializare și poate fi efectuată utilizând o funcție. serialize ().

Conversia rândului în numere

Dacă șirul este recunoscut ca o valoare numerică, valoarea rezultată și tipul este definită după cum se arată mai jos.

Dacă șirul nu conține niciunul dintre caractere ".", "E" sau "E", iar valoarea numărului este plasată în limitele numerelor întregi (definite Php_int_max.), șirul va fi recunoscut ca un număr întreg ( întreg). În toate celelalte cazuri, este considerat un număr de punct plutitor ( pluti).

Valoarea este determinată de partea inițială a liniei. Dacă șirul începe cu o valoare numerică corectă, această valoare va fi utilizată. În caz contrar, valoarea va fi 0 (zero). Valoarea numerică corectă este una sau mai multe cifre (care pot conține un punct zecimal), la cererea semnului prezentat cu indicatorul opțional ulterior. Indicatorul de grad este "e" sau "e" cu unul ulterior sau mai multe numere.

$ Foo \u003d 1 + "10,5"; // $ foo este flotor (11.5)
$ Foo \u003d 1 + "-1,3e3"; // $ foo este flotor (-1299)
$ Foo \u003d 1 + "bob-1.3e3"; // $ foo este întreg (1)
$ Foo \u003d 1 + "bob3"; // $ foo este întreg (1)
$ Foo \u003d 1 + "10 porci mici"; // $ foo este întreg (11)
$ Foo \u003d 4 + "10,2 piggii mici"; // $ foo este flotor (14.2)
$ Foo \u003d "10,0 porci" + 1; // $ foo este flotor (11)
$ Foo \u003d "10,0 porci" + 1.0; // $ foo este flotor (11)
?>

Pentru mai multe informații despre această conversie, consultați secțiunea Documentație Unix Strod (3).

Dacă doriți să testați oricare dintre exemplele acestei secțiuni, copiați-o și lipiți-o și următoarea linie pentru a vedea ce se întâmplă:

echo "\\ $ foo \u003d\u003d $ foo; Tip:". Gettype ($ foo). "
\\ n ";
?>

Nu vă așteptați să obțineți un cod de simbol prin transformarea acestuia într-un număr întreg (așa cum se face, de exemplu, în C). Pentru a converti caracterele la codurile lor ASCII și utilizați funcțiile înapoi ord () și cHR ().

Detalii privind implementarea unui tip de șir

cu 7 ani în urmă.

Documentația nu menționează, dar un punct și virgulă de închidere la sfârșitul heredocului este de fapt interpretat ca un punct și virgulă real și, ca atare, uneori duce la erori de sintaxă.

$ Foo \u003d.<<aBCD.
Sfârșit;
?>

Asta nu:

foo (<<aBCD.
Sfârșit;
);
// Eroare de sintaxa, neasteptata ";"
?>

Fără punct și virgulă, funcționează bine:

foo (<<aBCD.
Sfârșit.
);
?>

Acum 3 ani.

Puteți utiliza șir ca gama de caractere (cum ar fi c)

$ a \u003d "test de arduri de șir";

var_dump ($ a);
// șir de întoarcere (17) "test de array string"

var_dump ($ a);
// șir de întoarcere (1) "s"

// - cu array turnat -
var_dump ((matrice) $ a);
// matrice de întoarcere (1) (\u003d șir (17) "test de matrice șir")

var_dump ((matrice) $ a);
// șir de întoarcere (17) "s"

Norihiori.

ACUM 15 ANI.

Puteți utiliza sintaxa complexă pentru a pune valoarea atât a proprietăților obiectului, cât și a metodelor de obiect în interiorul unui șir. De exemplu ...
testul de clasă (
Public $ one \u003d 1;
Funcția publică Două () (
Retur 2;
}
}
$ test \u003d noul test ();
echo "foo ($ test -\u003e unu) bar ($ test -\u003e două ())";
?>
Va ieși "foo 1 bar 2".

Cu toate acestea, nu puteți face acest lucru pentru toate valorile din spațiul dvs. de nume. Constantele de clasă și proprietățile / metodele statice nu vor funcționa deoarece sintaxa complexă caută "$".
testul de clasă (
Const unul \u003d 1;
}
eCHO "FOO (Testare: One)";
?>
Acest lucru va ieși "foo (testul: unu) bar." Constantele și proprietățile statice necesită să desființați șirul.

Acum 3 ani.

Feriți-vă că în concordanță cu "conversia șirului" la numere ":

Dacă ("123ABC" \u003d\u003d 123) ECHO "(Intstr \u003d\u003d Int) teste incorecte ca fiind adevărate.";

// Pentru că o parte este un număr, șirul este convertit incorect de la Intstr la Int, care se potrivește apoi cu numărul de testare.

// Adevărat pentru toate condițiile de condiție, cum ar fi și state de schimb (probabil și în timp ce buclele)!

// Acesta ar putea fi un risc imens de securitate la testarea / utilizarea / salvarea intrărilor de utilizator, în timp ce testat și testarea numai pentru un număr întreg.

// Sems Singura fix este pentru 123 pentru a fi un șir ca "123", astfel încât nu se întâmplă nicio conversie.

?>

ACUM 6 ANI.

Dreptul zeroilor în corzi sunt (cel mai puțin surpriză) care nu sunt tratate ca Octal.
Considera:
$ x \u003d "0123" + 0;
$ y \u003d 0123 + 0;
Echo "x este $ x, y este $ y"; // Prints "X este 123, Y este 83"
cU ALTE CUVINTE:
* Zerul de conducere în literale numerice din codul sursă sunt interpretate ca "Octal", C.F. Strrtol ().
* Dreptul zerourilor în șiruri de date (de exemplu, datele trimise de utilizator), atunci când sunt distribuite (implicit sau explicit) la întreg sunt ignorate și considerate ca zecimal, C.F. Strod ().

acum 10 ani.

Aici este un hack ușor pentru a permite șirurile și heredocii dublu-citiți să conțină expresii arbitrare în sintaxa de bretele curbate, inclusiv constantele și alte apeluri funcții:

// Declarația Hack.
funcție _expr ($ v) (return $ v;)
$ _Expr \u003d "_expr";

// Terenul nostru de joacă.
definiți ("QWE" , "ASD");
defini("Zxc", 5 );

$ A.= 3 ;
$ B.= 4 ;

funcţie. c.($ A., $ B.) (Întoarcere.$ A.+ $ B.; }

// Utilizare
ecou."Pre.{ $ _Expr.(1 + 2 )} Post \\ n "; // ieșiri "Pre 3 post"
ecou."Pre.{ $ _Expr.(qWE.)} Post \\ n "; // ieșirile "PRES ASD POST"
ecou."Pre.{ $ _Expr.(c.($ A., $ B.)+ zXC.* 2 )} Post \\ n "; // ieșiri "Pre 17 post"

// sintaxa generală este ($ _expr (...))
?>

acum 2 ani.

Deși că ar fi de ajutor să adăugați acest comentariu, astfel încât informațiile să fie cel puțin pe pagina corectă de pe site-ul PHP.

Rețineți că dacă intenționați să utilizați un șir dublu cu o cheie asociativă, puteți fi în eroarea T_ENCAPSED_AD_WHITEESPACES. Unele consideră acest lucru ca unul dintre mesajele de eroare mai puțin evidente.

O expresie cum ar fi:

$ Fructe.\u003d matrice (
"A"=> "Măr",
"B"=> "BANANĂ",
// etc.
);

Imprimare "Acesta este un$ Fructe.[ "A"] "; // t_encapsed_and_whitespace.
?>

va cădea cu siguranță în bucăți.

Puteți rezolva după cum urmează:

imprimare."Acesta este un$ Fructe.[ a.] " ; // Unquote Cheia
imprimare."Acesta este un${ fructe.[ "A"]} " ; // sintaxă complexă
imprimare."Acesta este un{ $ Fructe.[ "A"]} " ; // variație complexă de sintaxă
?>

Am o preferință personală pentru ultima variație, deoarece este mai naturală și mai aproape de ceea ce expresia ar fi ca în afara șirului.

Nu este clar (pentru mine, cel puțin) de ce PHP Missinterpretează citația unică din interiorul expresiei, dar îmi imaginez că are ceva de-a face cu citatele de fapt nu fac parte din șirul de valoare - odată ce șirul este deja analizat citatele A sta in cale ...?

acum 2 ani.

Ambele ar trebui să funcționeze :(

clasăTestarea{
Public static.
$ Var.= "Static";
Public const var \u003d
"Const";

Funcția publică. sayhellostal.() {
Ecou.
"Buna ziua:{ $ Acest lucru:: $ Var.} " ;
}

Funcția publică. sayhellocon.() {
Ecou.
"Buna ziua:{ $ Acest lucru:: var)" ; // Parse Error: Eroare de sintaxă, neașteptată ")", așteptând "["
}
}

$ Obj.\u003d Nou.Testarea();
$ Obj.-> sayhellostal.();
$ Obj.-> sayhellocon.();

Acum 3 ani.

Ceva ce am experimentat care, fără îndoială, va ajuta pe cineva. . .
În editorul meu, aceasta va evidenția Syntax HTML și $ comentariu:

$ Html \u003d.<<<"EOD"
$ comentariu.
Eod;

Folosind acest lucru arată aceeași culoare:

$ Html \u003d.<<$ comentariu.
Eod;

făcând mult mai ușor să lucrați

Acum 11 ani.

Pentru a vă salva mintea, nu citiți comentariile anterioare despre date;)

Atunci când șirurile de bot pot fi convocate la numeric (în ("$ a"\u003e "$ B") test), se utilizează numericele rezultate, altfel șirurile complete sunt comparate char-by-char:

var_dump.("1.22" > "01.23" ); // bool (fals)
var_dump.("1.22.00" > "01.23.00" ); // bool (adevărat)
var_dump.("1-22-00" > "01-23-00" ); // bool (adevărat)
var_dump.((Pluti)"1.22.00" \u003e (Float)"01.23.00" ); // bool (fals)
?>

Rândurile din PHP sunt încadrate de citate simple sau duble. Principala diferență este că în citatele duble pot fi înlocuite cu o variabilă:

Acum putem veni cu o altă soluție la sarcina variabilelor de lecție din PHP:

$ Titlu"; Eco"

$ Conținut.
"; ?>

Cum arată PHP o variabilă în șir?

Totul este simplu. Amintiți-vă ce caractere pot fi utilizate în numele variabilei? Acestea sunt numere, litere și accentuarea _.

Aici este PHP și acceptă pentru numele totul este între simbolul $ și primul simbol interzis.

În următorul cod PHP, acesta va determina incorect numele variabilei și va da o eroare:

Rezultă în browser:

ANUNȚ: Variabila nedefinită: prețul în D: \\ OpenServer \\ Domains \\ site \\ index.php pe linia 3

La PHP a determinat corect numele variabilei în șir, trebuie să îl plasați în paranteze Curly ():

Rezultă în browser:

1499rub.

Nu există o opinie fără ambiguitate, ce citate trebuie să fie utilizate pentru liniile obișnuite în care nimic nu trebuie înlocuit. Cu toate acestea, mulți programatori preferă să utilizeze citate unice.

Faptul este că citatele duale din multe cauze "la această linie ar trebui să înlocuiască ceva". Prin urmare, vă recomandăm să utilizați citate simple pentru textul obișnuit și dublu - numai atunci când trebuie să înlocuiți variabila în text. Exemplu:

Citate de ecranare

Dacă aveți nevoie să puneți citate în interiorul șirului, există două modalități de a le face:

În al doilea exemplu, stratul invers \\ scutură citatele de lângă ea, astfel încât PHP să-l percepute ca un șir.

Ce credeți că trebuie să faceți pentru a afișa numai slash-ul invers? La urma urmei, va proteja o cotație de închidere. Este amuzant, dar trebuie să scrieți un al doilea slash pentru a proteja primul:

Tabulare și transfer de șir în ghilimele duble

Stratul invers în citate dublă vă permite să vă protejați nu numai citatele și dvs., ci și alte caractere. Cele mai populare dintre ele este o filă (spațiul lung pe care îl obțineți când apăsați Tab) și transferul șirului. Arătau așa:

Scrieți un script care:
1. Creează o variabilă de tip $ cu o valoare a jocului.
2. Creează un nume variabil $ cu valoarea "World of Warcraft" (cu citate).
3. Afișează ambele variabile în interiorul etichetei

. Trebuie să existe un spațiu între variabile.

Ce fel de citate foloseste pentru a design siruri - apostrofe sau citate duble clasice?

Să analizăm diferența dintre citatele duble și singure în PHP și în exemple, aflați când trebuie să utilizați.

Variabilele și secvențele de protecție pentru caracterele speciale întâlnite în linii închise în citate unice nu sunt procesate. Liniile încadrate de apostrofe sunt procesate de interpretul PHP mult mai rapid decât liniile similare înconjurate de citate duble.

Motivul aici este simplu: liniile din ghilimele duale PHP verificări suplimentar pentru variabile și dacă acestea sunt situate, atunci în loc de numele variabilei din șir, introduceți valoarea sa. Dar șirul încheiat în apostrofe este perceput de interpret ca text obișnuit și fără transformări în aceste linii PHP nu se desfășoară. Cred că este clar că prelucrarea liniilor în citate unice în orice caz va avea loc mai repede.

Pentru a începe cu, descriem cum să determinăm șirul și apoi să verificați cât de repede vor apărea rândurile în citate unice.

Cea mai ușoară modalitate de a determina șirul este de ao concluziona în citate unice ("). Pentru a utiliza citate unice în interiorul șirului închis în citate unice, acestea trebuie să fie în fața simbolului invers (\\), care este ecranat. Dacă chiuveta inversă trebuie să meargă înainte de o citate unică sau să fie la capătul liniei, trebuie să-l duplicați. Dacă încercați să protejați orice alt caracter, caracteristica de scufundare inversă va fi de asemenea tipărită.

Dăm un exemplu de utilizare a citatelor simple:
// eliminați: șir simplu
ecou "rând simplu";
// elimină: Sunt aici
echo "Sunt aici";
// va ieși: nu va introduce: \\ n nou șir
echo "Nu se va introduce: șir nou";
// va ieși: variabila de eșantionare $ nu va înlocui, de asemenea
eCHO "variabila de exemplu nu va înlocui nici"; Dacă șirul este închis în ghilimele duble ("), PHP recunoaște mai multe secvențe de control pentru caractere speciale și, de asemenea, înlocuitori în locul numelui variabil în șirul valorii sale. La fel ca în cazul citatelor unice, pentru a utiliza citate dublu în interiorul unui șir Încheiat. În citate dublă, trebuie să fie înainte cu un simbol al panglicii inversate (\\).

Să dăm un exemplu de utilizare a citatelor duble:
// eliminați: șir simplu
ecou "rând simplu";
// Will Out: Firmă "Snowdrop"
echo "Firmă \\" Snowdroy \\ "";
// va ieși: se va traduce într-un șir nou
ecou "se va traduce în noua linie \\ n";
// va ieși: variabila va înlocui
$ exemplu \u003d "substitut";
eCHO "variabilă $ exemplu"; De asemenea, trebuie amintit că secvența "\\ n" (linie nouă), "\\ R" (carul de întoarcere) pentru textul obișnuit și nu pentru HTML. Deci, în browser, nu veți vedea modificări (numai în pagina sursă a paginii).

Să aflăm cât mai repede decât citatele unice de dublu. Pentru măsurători, scrieți un script de testare scurt și, imediat, rețineți că, dacă aveți acest lucru, rezultatele care depind de hardware-ul PC-ului sau serverului vor fi diferite.
// returnați ștampila de timp la începutul ciclului
$ Start \u003d microtime (adevărat);
// Creați un ciclu de ciclu pentru 1 milion de iterații
pentru ($ i \u003d 0; $ i< 1000000; $i++) {
$ Text \u003d "aici este un șir de simbol";
}
// calculați timpul petrecut
$ Time \u003d (microtime (adevărat) - $ start); Rezultat: 0,09 secunde.

Dacă înlocuim citatele unice la dublu:
$ Text \u003d "aici este un șir de simbol"; Rezultatul va fi egal cu 0,10 secunde.

După cum vedem, când folosim linii de text, diferența în timp de execuție este foarte mică, se poate spune chiar și nu există deloc. Cel mai interesant va începe când încercăm să combinăm șirul și variabila.
$ Text \u003d "Aici este linia de simbol $ i"; sau
$ text \u003d $ i. "Iată un șir simbolic"; Rezultatul este de aproximativ: 0,27 secunde.

Diferența este foarte sensibilă. Concatenarea și ghilimele duale afectează în mod clar viteza dacă variabilele sunt adăugate la șir.

Când serverul procesează codul, verifică toate conținutul citatelor duale pentru variabile, constante și altele. Dureaza. Și faptul că există între citează unică procesele serverului ca text finit și nu-i pasă ce se află acolo. Diferența dintre viteza citatelor unice și duble este foarte nesemnificativă, dar dacă dezvoltați un proiect foarte încărcat, într-o oarecare măsură salvată de milisecunde sunt deja o victorie.