Ce este nou în PHP 5.4?

Pe 1 martie, timpul a venit în sfârșit: la mai bine de doi ani și jumătate de la lansarea versiunii 5.3.0, managerii de lansare a noii versiuni, Stas Malyshev și David Soria Parra, au anunțat disponibilitatea versiunii PHP 5.4.0. Cu ajutorul a opt candidați la lansare, această versiune a fost ajustată de la mijlocul lunii octombrie a anului trecut. Versiunea 5.4.0 conține o mulțime de caracteristici noi și îmbunătățiri mai mici, este mai rapidă și mai slabă, dar aduce și o listă de noi caracteristici, care pot duce la modificări ale propriului cod. Chiar dacă lista de inovații nu este deosebit de lungă, câteva lucruri s-au schimbat. După lansarea versiunii 5.3, PHP 6 a fost de fapt lucrat, așa cum arată diferite titluri de cărți anunțate anterior, dar niciodată publicate. Dar, după luni de muncă la o trecere fundamentală la UTF-16, această cale a fost respinsă din diferite motive. Multe alte caracteristici au rămas și au fost păstrate pentru 5.4 și 5.x suplimentare.

care este

Curățarea primăverii

PHP 5.4 nu mai acceptă sau necesită versiunea 2.13 a autoconf lansată în 1999, care este furnizată doar de distribuții din cauza unei mână de pachete. Versiunile de la 2.59 sunt acum acceptate, în timp ce 2.60 sau mai noi sunt recomandate. Acesta din urmă ar trebui să fie disponibil în fiecare distribuție Linux modernă, dar efectele nu sunt critice și ar trebui să afecteze doar ieșirea de ajutor a apelului ./configure. Desigur, acest lucru afectează doar procesul de construire PHP și are o importanță redusă pentru utilizator.

Cu toate acestea, trebuie menționate caracteristicile și opțiunile omise, dintre care cele mai răspândite au fost probabil directivele INI safe_mode (și toate legate de acesta), magic_quotes_gpc, allow_call_time_pass_reference și register_globals/register_long_arrays, care, cu toate acestea, au fost marcate ca fiind depreciate în 5.3.0 . safe_mode a fost mult timp criticat pentru creșterea securității doar marginal, dar în același timp transmite o imagine greșită a securității și, mai presus de toate, cauzează multe probleme cu configurația. magic_quotes_gpc, register_globals și register_long_arrays, pe de altă parte, au fost dezactivate în mod constant în majoritatea colecțiilor de mult timp în sensul celor mai bune practici și utilizarea lor a fost rău.

Lista funcțiilor eliminate este limitată la următoarele: define_syslog_variables (), import_request_variables (), session_register (), session_unregister () și session_is_registered () sunt toate aproximativ legate de furnizarea globală a variabilelor de solicitare prin register_globals și altele și sunt, prin urmare, învechite. Au fost eliminate și diverse funcții mysqli_ *, dar nu toate. În plus, extensiile MySQL mysql, mysqli și PDO_mysql utilizează acum biblioteca implicită mysqlnd curentă. Libmysql învechit poate fi încă folosit, dar trebuie să fie compilat și în.

De asemenea, merită menționată gestionarea fusurilor orare. Fără a specifica data.timezone în php.ini sau folosind funcția date_default_timezone_set (), fusul orar nu mai este ghicit, dar UTC este folosit ca valoare implicită. În plus, nu există suport pentru putenv ("TZ = ...").

Extensia sqlite2 mai veche ext/sqlite a fost eliminată din instalarea implicită, dar extensiile mult mai frecvent utilizate ext/sqlite3 și ext/pdo_sqlite rămân neafectate. Ele pot fi încă găsite în folderul/pecl/din codul sursă (nu trebuie confundate cu depozitul PECL în care au fost inițial localizate).

Pentru a fi abolite în viitorul apropiat, funcțiile mcrypt_generic_end () și mysql_list_dbs () au fost marcate ca depreciate. De asemenea, 5.4 va fi ultima versiune PHP care va avea pachete Windows pentru Windows XP și Windows 2003.

Fragmentul de cod din Listarea 1 ar avea rezultate exact opuse cu PHP 5.3, adică adevărat/fals pentru isset ()/gol (). Cu toate acestea, nu numai șirurile ca compensări sunt afectate, valorile duble, booleene și zero provoacă, de asemenea, mesaje E_NOTICE. Compensările de șiruri, pe de altă parte, care pot fi exprimate la valori întregi prin difuzarea automată a PHP (de exemplu, '12 .3 'sau' 5 foo ') generează un E_NOTICE, dar sunt în continuare convertite la 12 sau 5 și astfel „funcționează”. Utilizarea superglobilor ca nume de parametri, cum ar fi în exemplul următor, duce acum la o eroare fatală la convertirea matricelor într-un șir (care a dus la un șir cu matrice de conținut), posibil neobservate până acum:

Dacă acum conversia generează și un E_NOTICE, comportamentul este păstrat din motive de compatibilitate inversă.

Folosind array_combine (array (), array ()) rezultă acum, așa cum ne-am aștepta, o matrice goală în loc de FALS și setarea unei proprietăți pe o variabilă care este NULL, fals sau un șir gol are ca rezultat E_WARNING, în loc de E_STRICT.

Nivelul de eroare E_ALL include acum E_STRICT în mod implicit; una dintre cele mai aprinse schimbări, deși și aici dezvoltatorii au fost sfătuiți de ani de zile să se dezvolte cu nivelul maxim de eroare pentru a nu trece cu vederea avertismentele, oricât de inofensive ar părea. Devine problematic aici dacă, spre deosebire de recomandările contrare, opțiunea display_errors = On este setată în funcțiune live și sunt afișate avertismentele E_STRICT conținute acum în E_ALL.

O tendință din ce în ce mai proeminentă în discuțiile din lista de e-mail a dezvoltatorilor este de a nu face ca niciun comportament de bază al motorului PHP să fie configurabil pentru utilizator. Acest lucru nu limitează funcționalitatea, ci doar pentru a evita surprize, de exemplu că aplicațiile reacționează complet diferit, în funcție de cum arată php.ini folosit. Directivele de mai sus magic_quotes_gpc și register_globals au fost cel mai important pas aici, dar y2k_compliance, session.bug_compat_42 și session.bug_compat_warn au fost, de asemenea, abolite în acest proces.

[header = Pagina 2: Cele mai importante caracteristici]

Cele mai importante caracteristici

Cea mai lungă caracteristică discutată este ceea ce este cunoscut sub numele de trăsături. Au fost propuși încă din 2008 de către Stefan Marr sub titlul „Reutilizare orizontală” și chiar au trebuit să supraviețuiască două RFC-uri și diferite discuții lungi pe lista de distribuție internă. Lui Steve Cook i se atribuie expresia „Moștenirea multiplă este bună, dar nu există o modalitate bună de a o face.” Și trăsăturile sunt datorate ideii de a implementa moștenirea multiplă în așa fel încât avantajele să depășească dezavantajele [1]. Detalii despre implementarea trăsăturilor pot fi găsite la [2]. Un număr de clase pot servi ca exemplu aici, toate acestea ar trebui să poată înregistra anumite acțiuni, dar să nu împărtășească o ierarhie a moștenirii și astfel fie să dubleze, fie să încapsuleze aceeași funcționalitate (Listarea 2).

PHP 5.4 a obținut în cele din urmă un server web intern care poate face o treabă bună în dezvoltare. Numai din motive de performanță, nu ar trebui să fie utilizat în mod productiv, deoarece serverul web gestionează toate solicitările una după alta (inclusiv foi de stil integrate, fișiere grafice și JavaScript). Se poate presupune, de asemenea, că această nouă caracteristică nu a fost testată la fel de puternic în ciclul de lansare ca modificările care sunt utilizate în funcționarea propriei aplicații pe noua versiune. De asemenea, documentația nu recomandă în mod explicit utilizarea productivă.

Serverul web intern este apelat pe linia de comandă cu comanda php -S hostname: port. Aici, hostname: port ar trebui să fie în mod normal ceva de genul localhost: 81. Pentru ca serverul web să poată fi accesat și din exterior, se poate folosi și 0.0.0.0:81. Directorul curent este apoi utilizat ca DocumentRoot, dar acesta poate fi setat în mod explicit cu argumentul -t la pornire. De asemenea, este posibil să specificați un script PHP ca ultim argument, care reprezintă un controler frontal minim. Listarea 3 prezintă un exemplu din documentație.

Fișierele care sunt imagini în funcție de extensia lor de fișier sunt livrate direct aici, altfel conținutul este pur și simplu returnat. Acest lucru se poate face prin ieșire directă sau include/cere. Setările mai complicate, cum ar fi în aplicațiile cu multe mod_rewrite, ar trebui să fie portabile cu un anumit efort. Din păcate, nu există încă nicio soluție rapidă cunoscută în general. Dar, deoarece majoritatea cadrelor actuale au toate sarcinile realizate de index.php în DocumentRoot oricum, efortul ar trebui să fie limitat.

Serverul web este considerat un SAPI (API API) separat cu numele cli-server, dar este, de asemenea, un binar CLI din punct de vedere al comportamentului și, prin urmare, nu folosește același php.ini ca binarul CGI/FastCGI utilizat de obicei în serverul web. Opțiunea -c la pornire vă permite să utilizați php.ini dorit și aici. O ieșire colorată la linia de comandă poate fi activată și aici prin cli_server.color. PHP acceptă, de asemenea, o sintaxă scurtă, similară cu cea a JavaScript-ului sau a altor limbi. Introducerea lui: în loc de => a fost omisă, notația [] poate fi înțeleasă pur și simplu ca o formă scurtă de matrice () (Listarea 4).

Mai multe trăsături

Au existat, de asemenea, o mulțime de caracteristici mai mici care ar putea, în mare, simplifica viața unui programator PHP. Există acum tipul apelabil, care permite parametrii care îndeplinesc aceleași criterii pe care le verifică funcția is_callable (). Acestea sunt în mare parte închideri și șiruri care conțin nume de funcții, dar notația matricei în matricea formularului („clasă”, „metodă”) sau matrice ($ obiect, „metodă”) este de asemenea acceptată. Întregul lucru servește pentru a simplifica gestionarea închiderilor fără apeluri suplimentare către is_callable () (Listarea 5). Așa cum era de așteptat, „Hello, World!” Este afișat. Desigur, această „dereferențiere a matricei” funcționează și dacă se returnează o matrice asociativă sau mixtă.

Numerele binare pot fi acum scrise în forma 0b101010, similar cu modul în care numerele hexagonale pot fi scrise în forma 0x2a. Forma scurtă