PHP 5.4 este aici! Ce trebuie să știți

PHP 5.4 este aici; următorul pas major de la versiunea 5.3 - păstrarea în așteptare a programului PHP 6 (suport complet Unicode). Cele mai noi îmbunătățiri îmbunătățesc semnificativ eleganța sa, în timp ce elimină funcționalitatea depreciată, rezultând o optimizare dramatică a runtime-ului (cu până la 20% mai multă viteză și reducerea utilizării memoriei).


Noile caracteristici și îmbunătățiri

Unele dintre caracteristicile cheie noi includ trăsăturăs, un scurtat mulțime sintaxă, un server web încorporat în scopuri de testare, utilizarea $ this în închideri, accesul membrilor la clasă la instanțiere, este întotdeauna disponibilă și multe altele!

PHP 5.4.0 îmbunătățește semnificativ performanța, amprenta de memorie și rezolvă peste 100 de bug-uri. Funcțiile remarcabile depreciate / eliminate au inclus register_globals, magic_quotes (despre timp) și safe_mode. De asemenea, merită menționat faptul că suportul multibază este activat implicit și default_charset a fost schimbat de la ISO-8859-1 la UTF-8.

Tip de conținut: text / html; charset = utf-8 este întotdeauna trimis; astfel încât nu este nevoie să setați această etichetă meta HTML sau să trimiteți antete suplimentare pentru compatibilitate UTF-8.


trasaturi

Cea mai bună demonstrație a trăsăturilor este atunci când mai multe clase partajează aceeași funcționalitate.

Trăsăturile (reutilizarea orizontală / moștenirea multiplă) reprezintă un set de metode care sunt structurale similare cu a clasă (dar nu pot fi instanțiate), care pot permite dezvoltatorilor să reutilizeze seturi de metode în mod liber în mai multe clase independente. Deoarece PHP este un singur limbaj de moștenire, o subclasă poate moșteni dintr-o singură superclazie; acolo sunt trăsăturile care vin să se joace.

Cea mai bună utilizare a trăsăturilor este demonstrată atunci când mai multe clase împărtășesc aceleași funcționalități. De exemplu, imaginați-vă că construim un site Web și că trebuie să folosim atât API-urile Facebook, cât și Twitter. Construim două clase care, în comun, au o funcție / metodă de împachetare cURL. În loc să realizăm copia și pastele clasice ale acelei metode - pentru a fi utilizate în două clase - folosim Trasaturi (copy & paste, stil compilator). În acest fel, facem codul reutilizabil și urmați principiul DRY (Do not Repeat Yourself).

Iată un exemplu:

 / ** cURL caracteristica wrapper * / trait cURL funcția publică curl ($ url) $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ ieșire = curl_exec ($ ch); curl_close ($ ch); returnați outputul $;  / ** Twitter Clasa API * / clasa Twitter_API use cURL; // foloseste trait aici functia publica get ($ url) returneaza json_decode ($ this-> curl ('http://api.twitter.com/'.$url));  / ** Clasa API Facebook * / clasa Facebook_API use cURL; // și aici funcția publică obține ($ url) returnează json_decode ($ this-> curl ('http://graph.facebook.com/'.$url));  $ facebook = nou Facebook_API (); echo $ facebook-> get ('500058753') -> nume; // Rasmus Lerdorf / ** Acum demonstrand minunata PHP 5.4 sintaxa * / echo (new Facebook_API) -> get ('500058753') -> nume; // Rasmus Lerdorf $ foo = 'primi'; echo (nou Facebook_API) -> $ foo ('500058753') -> nume; // și din nou, Rasmus Lerdorf ecou (noul Twitter_API) -> get ('1 / users / show.json? screen_name = rasmus') -> nume; // și încă o dată, Rasmus Lerdorf // P.S. Nu sunt obsedat de Rasmus :)

Am înțeles? Nu? Iată cel mai simplu exemplu!

 trait Net funcția publică net () return 'Net';  trăsătură Tuts public function tuts () return 'Tuts';  clasa NetTuts utilizează Net, Tuts; funcția publică plus () return '+';  $ o = NetTuts noi; echo $ o-> net (), $ o-> tuts (), $ o-> plus (); echo (nettuts noi) -> net (), (nettuts noi) -> tuts (), (nettuts noi) -> plus ();

Dacă aveți întrebări despre trasaturi, vă rugăm să postați o notă în secțiunea de comentarii de mai jos.

Sfat important: Constanta magică pentru trăsături este __TRĂSĂTURĂ__.


Built-in CLI Web-Server

În dezvoltarea web, cel mai bun prieten al lui PHP este serverul HTTPD Apache. Uneori, însă, poate fi depășit setarea httpd.conf doar pentru ao folosi într-un mediu de dezvoltare, atunci când într-adevăr aveți nevoie de un server web mic care poate fi lansat cu o linie de comandă simplă. Din fericire, PHP 5,4 vine cu un server web CLI încorporat.

Serverul web PHP CLI este conceput numai pentru scopuri de dezvoltare și nu ar trebui utilizat în producție.

Notă: Instrucțiunile de mai jos sunt pentru un mediu Windows.

Pasul 1 - Crearea directorului rădăcină de documente, fișierul router și fișierul index

Mergeți la rădăcina unității de hard disk (presupunând C: \). Creați un director / dosar, numit public_html. Creați un fișier nou în acest director și denumiți-l router.php. Copiați conținutul de mai jos și inserați-l în noul fișier creat.

 

Acum, creați un alt fișier, numit index.php. Copiați conținutul de mai jos și salvați fișierul.

 

Deschide-ți php.ini fișier (se află în directorul de instalare PHP - de ex. C: \ php).

Găsi include_path (este situat la ~ 708th line). Adăuga C: \ public_html până la sfârșitul șirului între citate, separate de a punct şi virgulă. Rezultatul final ar trebui să arate astfel:

 include_path = ";; C: \ php \ PEAR; C: \ public_html"

Salvați și închideți fișierul. Până la pasul următor.

Pasul 2 - rulați Web-Server

Deschideți linia de comandă (ferestre + R, introduceți cmd, lovit introduce); ar trebui să vedeți ceva de genul acesta, în funcție de versiunea Windows.

 Microsoft Windows XP [Versiunea 5.1.2600] (C) Drepturi de autor 1985-2001 Microsoft Corp. C: \ Documents and Settings \ nettuts>

Schimbați directorul curent în instalarea PHP urmând exemplul de mai jos:

 C: \ Documente și setări \ nettuts> cd C: \ php C: \ php>

Aici vine partea cea mai importantă - rularea serverului web. Copie…

 php -S 0.0.0.0:8080 -t C: \ public_html router.php

... și lipiți-o în linia de comandă (butonul din dreapta al mouse-ului, faceți clic pe Pastă pentru a lipi). Lovit introduce. Dacă totul merge bine, ar trebui să vedeți ceva similar cu cel prezentat mai jos. Nu închideți linia de comandă; dacă faceți acest lucru, veți părăsi și serverul web.

 C: \ php> php -S 0.0.0.0:8080 -t C: \ public_html router.php PHP 5.4.0 Serverul de dezvoltare a început la Fri Mar 02 09:36:40 2012 Ascultarea pe 0.0.0.0:8080 Document root este C : \ public_html Apăsați pe Ctrl-C pentru a renunța.

Deschide http: // localhost: 8080 / index.php în browserul dvs. și ar trebui să vedeți:

 Bună ziua Nettuts + cititori!

Voila! Asta e, codare fericită!

Sfat 1: A face o php-server.bat fișier cu următorul conținut: C: \ php \ php -S 0.0.0.0:8080 -t C: \ public_html router.php. Faceți dublu clic pe acesta și, acum, serverul funcționează!

Sfat 2: Utilizare 0.0.0.0 in loc de gazdă locală dacă anticipați că serverul dvs. va fi accesat de pe internet.


Sintaxă arhitectură mai scurtă

PHP 5.4 oferă un nou mai scurt mulțime sintaxă:

 $ fruits = array ("mere", "portocale", "banane"); // "veche" // Același lucru ca notația literală a lui Javascript $ fruits = ['mere', 'portocale', 'banane']; // array asociativ $ array = ['foo' => 'bar', 'bar' => 'foo'];

Rețineți că metoda "veche" este încă în uz și va fi întotdeauna. Aceasta este pur și simplu o alternativă.


Array Dereferencing

Nu mai există variabile temporare atunci când se ocupă cu mulțimes!

Să ne imaginăm că vrem să obținem numele intermediar al lui Alan Mathison Turing:

 echo explode ("," Alan Mathison Turing ") [1]; // Mathison

Dulce; dar nu a fost întotdeauna așa ușor. Înainte de 5.4, trebuia să facem:

 $ tmp = explode ("," Alan Mathison Turing "); echo $ tmp [1]; // Mathison

Acum, dacă dorim să obținem numele de familie (ultimul element din mulțime):

 ecou sfârșit (explode ("," Alan Mathison Turing ")); // Turing

Acest lucru este bine, cu toate acestea, se va arunca o E_STRICT (Standarde stricte: Numai variabilele ar trebui să fie transmise prin referință) eroare, deoarece a devenit parte din E_ALL în raportarea erorii.

Iată un exemplu ușor mai avansat:

 funcția foobar () return ['foo' => ['bar' => 'Bună ziua']];  echo foobar () ['foo'] ['bar']; // Salut

$ this În funcții anonime

Acum puteți face referire la instanța obiectului din funcții anonime (cunoscute și ca închiderile) prin utilizarea $ this.

 clasa Foo function hello () echo 'Hello Nettuts!';  funcția anonimă () return () $ this-> hello (); // $ nu a fost posibil înainte de;  clasa Bar funcția __construct (Foo $ o) // obiect de clasă Foo typehint $ x = $ o-> anonymous (); // primi Foo :: salut () $ x (); // executa Foo :: hello () Bar nou (nou Foo); // Salut Nettuts!

Rețineți că acest lucru ar putea fi realizat înainte de 5.4, dar a fost prea mult.

 funcția anonimă () $ that = $ this; // $ care este acum $ this return function () foloseste ($ that) $ that-> hello (); ; 

este întotdeauna activată

Indiferent de php.ini cadru, short_open_tag, (eticheta deschisă PHP și ecoul) va fi întotdeauna disponibilă. Aceasta înseamnă că acum puteți utiliza în siguranță:

 

... în șabloanele dvs. în loc de ...

 

Reprezentarea numărului binar

Există doar 0b10 tipuri de oameni;
cei care înțeleg binar și cei care nu.

De acum înainte, numerele întregi pot fi specificate în notația zecimal (baza 10), hexazecimal (baza 16), octal (baza 8) sau binară (baza 2), eventual precedată de un semn (- sau +). Pentru a utiliza o notație octalică, precedați numărul cu un 0 (zero). Pentru a utiliza notația hexazecimală, precedeți numărul cu 0x. Pentru a utiliza notația binară, precedeți numărul cu 0b.

Exemplu: reprezentarea numărului 31 (zecimal).

 echo 0b11111; // binar, introdus în PHP 5.4 echo 31; // duh echo 0x1f; // ecou hexazecimal 037; // octal

Calitate de tip vopsea

Tiparire este pentru cei care doresc să facă PHP un limbaj mai puternic tastat. Tipul Sugestii poate fi doar din obiect și mulțime tip de la PHP 5.1, și nevărsat deoarece PHP 5.4. Tipul tradițional de aluzie cu int și şir nu este încă acceptată.

 funcția my_function (callable $ x) return $ x ();  funcția my_callback_function () return 'Hello Nettuts!'; class Hello funcția statică hi () return 'Hello Nettuts!' clasa Hi function hello () return 'Hello Nettuts! my_function (function () return 'Hello Nettuts!';); // funcția anonimă ecou my_function ('my_callback_function'); // funcția callback echo my_function (['Hello', 'hi']); // numele clasei, metoda statică echo my_function ([(Hi Hi), 'hello']); // obiect de clasă, nume de metodă

Inițializată cronometru de precizie înaltă

$ _SERVER [ 'REQUEST_TIME_FLOAT'] a fost adăugată, cu precizie microsecundă (float). Acest lucru este util când trebuie să calculați timpul de execuție pentru un script.

 echo 'Executed in', rotund (microtime (true) - $ _SERVER ['REQUEST_TIME_FLOAT'], 2), 's';

__destruct () (sau Rezumat)

În general, PHP 5.4 oferă numeroase îmbunătățiri. Acum, depinde de tine sa apuca o copie proaspata de la php.net si sa faci un cod PHP de calitate orientat Obiect!

?

Cod