PHP 5.4 er her! Hva du må vite

PHP 5.4 er her; neste store skritt fremover siden versjon 5.3 - å holde PHP 6 (full Unicode-støtte) på vent for nå. De siste forbedringene forbedrer sin eleganse betydelig, mens fjerning av utdatert funksjonalitet, noe som resulterer i en dramatisk optimalisering av kjøretiden (opptil 20% mer hastighet og reduksjon av minnebruk).


Nye funksjoner og forbedringer

Noen av de viktigste nye funksjonene inkluderer trekks, en forkortet matrise syntaks, en innebygd webserver for testformål, bruk av $ dette i lukninger, adgang til klassemedlem på instantiering, er alltid tilgjengelig, og mer!

PHP 5.4.0 forbedrer ytelsen betydelig, forbedrer minnet og lagrer over 100 feil. Merkbare utdaterte / fjernede funksjoner inkluderer register_globals, magic_quotes (om tid) og sikkerhetsmodus. Det er også verdt å nevne at multibyte-støtte er aktivert som standard og default_charset har blitt endret fra ISO-8859-1 til UTF-8.

Innholdstype: tekst / html; charset = utf-8 er alltid sendt; så det er ikke nødvendig å angi HTML-metataggen, eller sende flere overskrifter for UTF-8-kompatibilitet.


trekk

Den beste demonstrasjonen av egenskaper er når flere klasser deler samme funksjonalitet.

Egenskaper (horisontal gjenbruk / multiple arv) er et sett med metoder som er strukturelt lik en klasse (men kan ikke bli instantiated), som kan gjøre det mulig for utviklere å gjenbrukes sett av metoder fritt i flere uavhengige klasser. Fordi PHP er et enkelt arvsspråk, kan en underklasse arve fra bare en superklasse; Det er der egenskaper som kommer til å spille.

Den beste bruken av egenskaper er demonstrert når flere klasser deler samme funksjonalitet. For eksempel, tenk at vi bygger noe nettsted, og trenger å bruke både Facebook og Twitter APIer. Vi bygger to klasser som i fellesskap har en cURL wrapper funksjon / metode. I stedet for å utføre den klassiske kopien og lim inn den metoden - for å bli brukt i to klasser - bruker vi Egenskaper (kopi og lim, kompilator stil). På denne måten lager vi gjenbrukbar kode, og følger DRY (Gjenta ikke selv) prinsippet.

Her er et eksempel:

 / ** cURL wrapper egenskap * / egenskap cURL offentlig funksjon krølle ($ url) $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ output = curl_exec ($ ch); curl_close ($ ch); returnere $ output;  / ** Twitter API klasse * / klasse Twitter_API bruk cURL; // bruk trekk her offentlig funksjon få ($ url) return json_decode ($ this-> curl ('http://api.twitter.com/'.$url));  / ** Facebook API klasse * / klasse Facebook_API bruk cURL; // og her får offentlig funksjon ($ url) return json_decode ($ this-> curl ('http://graph.facebook.com/'.$url));  $ facebook = ny Facebook_API (); ekko $ facebook-> få ('500058753') -> navn; // Rasmus Lerdorf / ** Nå demonstrerer awesomeness av PHP 5.4 syntaks * / echo (new Facebook_API) -> get ('500058753') -> navn; // Rasmus Lerdorf $ foo = 'get'; ekko (nytt Facebook_API) -> $ foo ('500058753') -> navn; // og igjen, Rasmus Lerdorf ekko (ny Twitter_API) -> get ('1 / users / show.json? screen_name = rasmus') -> navn; // og enda en gang, Rasmus Lerdorf // P.S. Jeg er ikke besatt av Rasmus :)

Har det? Nei? Her er det enkleste eksempelet!

 egenskap Netto offentlig funksjon netto () retur 'Netto';  egenskaper Tuts public function tuts () return 'Tuts';  klasse NetTuts bruk Net, Tuts; offentlig funksjon pluss () retur '+';  $ o = nye NetTuts; ekko $ o-> netto (), $ o-> tuts (), $ o-> pluss (); ekko (nye NetTuts) -> netto (), (nye NetTuts) -> tuts (), (nye NetTuts) -> pluss ();

Hvis du har spørsmål om egenskaper, vennligst legg inn et notat i kommentarfeltet nedenfor.

Viktig Tips: Den magiske konstanten for egenskaper er __TREKK__.


Innebygd CLI Web-Server

I webutvikling er PHPs beste venn Apache HTTPD Server. Noen ganger kan det imidlertid være overkill å sette opp httpd.conf bare for å bruke det i et utviklingsmiljø, når du virkelig trenger liten webserver som kan lanseres med en enkel kommandolinje. Heldigvis kommer PHP 5,4 med en innebygd CLI webserver.

PHP CLI webserveren er kun utviklet for utviklingsformål, og bør ikke brukes i produksjon.

Merk: Instruksjonene nedenfor er for et Windows-miljø.

Trinn 1 - Opprett dokumentrotkatalog, rutefil og indeksfil

Gå til harddiskrotten din (antar C: \). Opprett en katalog / mappe, kalt public_html. Opprett en ny fil i denne mappen, og oppgi navnet router.php. Kopier innholdet nedenfor, og lim det inn i denne nyopprettede filen.

 

Nå, opprett en annen fil, kalt index.php. Kopier innholdet nedenfor og lagre filen.

 

Åpne din php.ini fil (den er plassert i PHP installasjons katalogen - f.eks. C: \ php).

Finn include_path innstillinger (den ligger på ~ 708. linje). Legg til C: \ public_html til slutten av strengen mellom sitater, adskilt av a semikolon. Det endelige resultatet skal se ut som:

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

Lagre og lukk filen. Fortsett til neste trinn.

Trinn 2 - Kjør web-server

Åpne ledeteksten (Windows + R, Skriv inn cmd, truffet Tast inn); Du bør se noe slikt, avhengig av din Windows-versjon.

 Microsoft Windows XP [Versjon 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C: \ Dokumenter og innstillinger \ nettverk>

Endre din nåværende katalog til PHP-installasjonen ved å følge eksemplet nedenfor:

 C: \ Dokumenter og Innstillinger \ nettverk> CD C: \ php C: \ php>

Her kommer den viktigste delen - kjører web-serveren. Kopiere…

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

... og lim det inn i ledeteksten (høyre museknapp, klikk Lim inn å lime inn). Truffet Tast inn. Hvis alt går bra, bør du se noe som ligner på det som vises nedenfor. Ikke lukk ledeteksten hvis du gjør det, vil du også gå ut av webserveren.

 C: \ php> php -S 0.0.0.0:8080 -t C: \ public_html router.php PHP 5.4.0 Utviklingsserver startet på fre Mar 02 09:36:40 2012 Lytt på 0.0.0.0:8080 Dokumentroten er C : \ public_html Trykk Ctrl-C for å avslutte.

Åpne opp http: // localhost: 8080 / index.php i nettleseren din og du bør se:

 Hei Nettuts + Lesere!

Voila! Det er det, lykkelig koding!

Tips 1: Lage en php-server.bat fil med følgende innhold: C: \ php \ php -S 0.0.0.0:8080 -t C: \ public_html router.php. Dobbeltklikk det, og nå er serveren oppe!

Tips 2: Bruk 0.0.0.0 i stedet for lokal vert hvis du forventer at serveren din vil bli tilgang til fra internett.


Kortere Array Syntax

PHP 5.4 tilbyr en ny kortere matrise syntaks:

 $ fruits = array ('epler', 'appelsiner', 'bananer'); // "gammel" måte // Det samme som Javascript er bokstavelig array notasjon $ fruits = ['epler', 'appelsiner', 'bananer']; // associative array $ array = ['foo' => 'bar', 'bar' => 'foo'];

Vær oppmerksom på at "gammel" metode fortsatt er i bruk og alltid vil være. Dette er ganske enkelt et alternativ.


Array Dereferencing

Ikke flere midlertidige variabler når du arbeider med matrises!

La oss forestille oss at vi vil hente mellomnavnet til Alan Mathison Turing:

 ekko eksplodere (", 'Alan Mathison Turing') [1]; // Mathison

Søt; men det var ikke alltid så lett. Før 5.4 måtte vi gjøre:

 $ tmp = eksplodere (", 'Alan Mathison Turing'); ekko $ tmp [1]; // Mathison

Nå, hva hvis vi ønsker å få etternavnet (siste element i matrise):

 ekko ende (eksplodere ("Alan Mathison Turing")); // Turing

Dette fungerer fint, men det vil kaste en E_STRICT (Strengstandarder: Bare variabler skal sendes ved referanse) feil, siden den ble en del av E_ALL i error_reporting.

Her er et litt mer avansert eksempel:

 funksjon foobar () return ['foo' => ['bar' => 'Hei']];  echo foobar () ['foo'] ['bar']; // Hallo

$ dette I Anonyme Funksjoner

Du kan nå referere til objektet forekomst fra anonyme funksjoner (også kjent som nedleggelser) ved bruk av $ dette.

 klasse Foo funksjon hallo () echo 'Hello Nettuts!';  funksjonen anonym () returfunksjon () $ this-> hallo (); // $ dette var ikke mulig før;  klasse Bar funksjon __construct (Foo $ o) // objekt av klasse Foo typehint $ x = $ o-> anonym (); // få Foo :: hallo () $ x (); // utføre Foo :: hallo () ny Bar (ny Foo); // Hei Nettuts!

Merk at dette kunne oppnås før 5.4, men det var overkill.

 funksjon anonyme () $ det = $ dette; // $ som er nå $ denne returfunksjonen () bruk ($ det) $ that-> hallo (); ; 

er alltid på

Uavhengig av php.ini innstilling, short_open_tag, (åpen PHP tag og ekko) vil alltid være tilgjengelig. Dette betyr at du nå trygt kan bruke:

 

... i maler i stedet for ...

 

Binær nummerrepresentasjon

Det er bare 0b10 typer mennesker;
de som forstår binær og de som ikke gjør det.

Helt fremdeles kan heltall angis i desimal (base 10), heksadesimale (base 16), oktal (base 8) eller binær (base 2) notasjon, eventuelt foran et tegn (- eller +). For å bruke oktal notering, før nummeret med 0 (null). For å bruke heksadesimal notasjon, før nummeret med 0x. For å bruke binær notasjon, før nummeret med 0b.

Eksempel: representasjon av nummer 31 (desimal).

 ekko 0b11111; // binær, introdusert i PHP 5.4 ekko 31; // duh echo 0x1f; // heksadesimal ekko 037; // oktal

Callable Typehint

Typehinting er for de som ønsker å lage PHP et sterkere skrevet språk. Type Tips kan bare være av gjenstand og matrise skriv siden PHP 5.1, og oppsigelige siden PHP 5.4. Tradisjonell type hinting med int og string er ennå ikke støttet.

 funksjon my_function (callable $ x) return $ x ();  funksjonen min_callback_function () return Hello Nettuts! '; klasse Hei statisk funksjon hei () return Hei Nettuts!'; klasse Hei funksjon hello () return Hei Nettuts! '; ekko my_function (funksjon () return 'Hello Nettuts!';); // anonym funksjon echo my_function ('my_callback_function'); // tilbakeringingsfunksjon ekko my_function (['Hei', 'hei']); // klassenavn, statisk metode echo my_function ([(ny Hei), "hei"]); // klasseobjekt, metodenavn

Initialized High Precision Timer

$ _SERVER [ 'REQUEST_TIME_FLOAT'] har blitt tilsatt, med mikrosekund presisjon (flyt). Dette er nyttig når du må beregne utføringstiden for et skript.

 ekko 'Executed in', round (mikrotime (true) - $ _SERVER ['REQUEST_TIME_FLOAT'], 2), 's';

__destruct () (eller sammendrag)

Samlet gir PHP 5.4 mange forbedringer. Nå er det opp til deg å ta en fersk kopi fra php.net, og lage kvalitetsobjektorientert PHP-kode!

?