PHP 5.4 är här; Nästa stora steg framåt sedan version 5.3 - håller PHP 6 (Full Unicode support) i väntan för nu. De senaste förbättringarna förbättrar sin elegans avsevärt, samtidigt som den avlägsnar avkallad funktionalitet, vilket resulterar i en dramatisk optimering av körtiden (upp till 20% mer hastighet och minskning av minnesförbrukningen).
Några av de viktigaste nya funktionerna är drag
s, en förkortad array
syntax, en inbyggd webbserver för teständamål, användning av $ detta
i stängningar, tillgång till klassmedlem vid instansiering, =
är alltid tillgänglig och mer!
PHP 5.4.0 förbättrar prestanda, minnesfotavtryck och fixar över 100 buggar avsevärt. Anmärkningsvärda avlägsna / borttagna funktioner inkluderar register_globals
, magic_quotes
(ungefär tid) och säkert läge
. Också värt att nämna är att multibyte support är aktiverat som standard och default_charset
har ändrats från ISO-8859-1 till UTF-8.
Innehållstyp: text / html; charset = utf-8
är alltid skickad; så det är inte nödvändigt att ställa in den HTML metataggen, eller skicka ytterligare rubriker för UTF-8-kompatibilitet.
Den bästa demonstrationen av egenskaper är när flera klasser delar samma funktionalitet.
Egenskaper (horisontellt återanvändning / multipelt arv) är en uppsättning metoder som strukturellt liknar a klass
(men kan inte instanseras), som kan göra det möjligt för utvecklare att återanvända uppsättningar metoder fritt i flera oberoende klasser. Eftersom PHP är ett enda arvsspråk, kan en undergrupp arva från endast en superklass; det är där drag som kommer att spela.
Den bästa användningen av egenskaper visas när flera klasser delar samma funktionalitet. Tänk oss att vi bygger en webbplats och behöver använda både Facebook och Twitter API. Vi bygger två klasser som gemensamt har en cURL wrapper funktion / metod. I stället för att utföra den klassiska kopian och klistra in den metoden - som ska användas i två klasser - använder vi Egenskaper (kopiera och klistra in, kompilator stil). På så sätt gör vi återanvändbar kod och följer principen DRY (Do not Repeat Yourself).
Här är ett exempel:
/ ** cURL wrapper egenskap * / egenskap cURL public function curl ($ url) $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ output = curl_exec ($ ch); curl_close ($ ch); returnera $ output; / ** Twitter API-klass * / klass Twitter_API använd cURL; // använda drag här public function get ($ url) return json_decode ($ this-> curl ('http://api.twitter.com/'.$url)); / ** Facebook API-klass * / klass Facebook_API använd cURL; // och här får den offentliga funktionen ($ url) return json_decode ($ this-> curl ('http://graph.facebook.com/'.$url)); $ facebook = nytt Facebook_API (); echo $ facebook-> get ('500058753') -> namn; // Rasmus Lerdorf / ** Nu demonstrerar awesomeness av PHP 5.4 syntax * / echo (new Facebook_API) -> get ('500058753') -> namn; // Rasmus Lerdorf $ foo = 'get'; echo (new Facebook_API) -> $ foo ('500058753') -> namn; // och igen, Rasmus Lerdorf echo (ny Twitter_API) -> get ('1 / users / show.json? screen_name = rasmus') -> namn; // och än en gång, Rasmus Lerdorf // P.S. Jag är inte besatt av Rasmus :)
Jag fattar? Nej? Här är det enklaste exemplet!
egenskap Net public function net () return 'Net'; egenskaper Tuts public function tuts () return 'Tuts'; klass NetTuts använd Net, Tuts; allmän funktion plus () retur '+'; $ o = nya NetTuts; echo $ o-> net (), $ o-> tuts (), $ o-> plus (); echo (nya NetTuts) -> net (), (nya NetTuts) -> tuts (), (nya NetTuts) -> plus ();
Om du har några frågor om egenskaper, vänligen skicka en anteckning i kommentarfältet nedan.
Viktigt tips: Den magiska konstanten för egenskaper är
__DRAG__
.
I webbutveckling är PHP bästa vän Apache HTTPD Server. Ibland kan det dock vara överkill att konfigurera httpd.conf bara för att använda det i en utvecklingsmiljö, när du verkligen behöver en liten webbserver som kan startas med en enkel kommandorad. Lyckligtvis kommer PHP 5,4 med en inbyggd CLI webbserver.
PHP CLI webbservern är endast avsedd för utvecklingsändamål och bör inte användas i produktionen.
Notera: Anvisningarna nedan gäller för en Windows-miljö.
Gå till din hårddiskrot (förutsatt C: \
). Skapa en katalog / mapp, kallad public_html
. Skapa en ny fil i den här mappen och namnge den router.php
. Kopiera innehållet nedan och klistra in det i den nybildade filen.
Skapa nu en annan fil, kallad index.php
. Kopiera innehållet nedan och spara filen.
Öppna din php.ini
fil (den finns i PHP-installations katalogen - t.ex.. C: \ php
).
Hitta include_path
inställningar (den ligger vid ~ 708: e raden). Lägg till C: \ public_html
till slutet av strängen mellan citat, åtskilda av a semikolon. Slutresultatet ska se ut:
include_path = ".; C: \ php \ PEAR; C: \ public_html"
Spara och stäng filen. Fortsätt till nästa steg.
Öppna kommandotolken (Windows + R, Skriv in cmd
, träffa Stiga på); Du borde se något så här, beroende på din Windows-version.
Microsoft Windows XP [Version 5.1.2600] (C) Upphovsrätt 1985-2001 Microsoft Corp. C: \ Documents and Settings \ nätnät>
Ändra din nuvarande katalog till PHP-installationen genom att följa exemplet nedan:
C: \ Documents and Settings \ netts> cd C: \ php C: \ php>
Här kommer den viktigaste delen - kör webbservern. Kopia…
php -S 0.0.0.0:8080 -t C: \ public_html router.php
... och klistra in det i kommandotolken (höger musknapp, klicka Klistra
att klistra). Träffa Stiga på
. Om allt går bra bör du se något som liknar vad som visas nedan. Stäng inte kommandotolken. om du gör det kommer du också att lämna webbservern.
C: \ php> php -S 0.0.0.0:8080 -t C: \ public_html router.php PHP 5.4.0 Utvecklingsserver startade på fre mar 02 09:36:40 2012 Lyssna på 0.0.0.0:8080 Dokumentroten är C : \ public_html Tryck Ctrl-C för att avsluta.
Öppna http: // localhost: 8080 / index.php
i din webbläsare och du bör se:
Hej Nätter + Läsare!
Voila! Det är det, glad kodning!
Tips 1: Göra en php-server.bat
fil med följande innehåll: C: \ php \ php -S 0.0.0.0:8080 -t C: \ public_html router.php
. Dubbelklicka på det, och nu är servern igång!
Tips 2: Använda sig av 0.0.0.0
istället för lokal värd
om du förväntar dig att din server kommer att nås från internet.
PHP 5.4 erbjuder en ny kortare array
syntax:
$ fruits = array ("äpplen", "apelsiner", "bananer"); // "gammalt" sätt // Samma som Javascripts bokstavsordning notation $ fruits = ['apples', 'appelsiner', 'bananer']; // associativ array $ array = ['foo' => 'bar', 'bar' => 'foo'];
Observera att "gammal" metod fortfarande används och alltid kommer att vara. Detta är helt enkelt ett alternativ.
Inga fler tillfälliga variabler när man hanterar array
s!
Låt oss föreställa oss att vi vill hämta mellannamn Alan Mathison Turing:
eko explodera ("," Alan Mathison Turing ") [1]; // Mathison
Ljuv; men det var inte alltid så lätt. Innan 5.4 var vi tvungna att göra:
$ tmp = explodera ("," Alan Mathison Turing "); echo $ tmp [1]; // Mathison
Nu, vad händer om vi vill få efternamnet (sista elementet i array
):
echo end (explodera ("," Alan Mathison Turing ")); // Turing
Det fungerar bra, men det kommer att kasta en E_STRICT
(Strikta standarder: Endast variabler ska skickas genom referens) fel, eftersom det blev en del av E_ALL
i felrapportering
.
Här är ett lite mer avancerat exempel:
funktion foobar () return ['foo' => ['bar' => 'Hej']]; echo foobar () ['foo'] ['bar']; // Hej
$ detta
I Anonyma FunktionerDu kan nu hänvisa till objektförekomsten från anonyma funktioner (även känd som förslutningar) genom att använda $ detta
.
klass Foo funktion hej () echo 'Hello Nettuts!'; funktionen anonym () return function () $ this-> hallo (); // $ det här var inte möjligt före; klassfält funktion __construct (Foo $ o) // objekt av klass Foo typhint $ x = $ o-> anonym (); // få Foo :: hej () $ x (); // kör Foo :: hej () ny Bar (ny Foo); // Hello Nettuts!
Observera att detta kan uppnås före 5.4, men det var överkill.
funktion anonyma () $ det = $ this; // $ det är nu $ denna returfunktion () använd ($ det) $ det-> hej (); ;
=
är alltid på Oberoende av php.ini
miljö, short_open_tag
, =
(öppen PHP-tagg och eko) kommer alltid att finnas tillgänglig. Det innebär att du nu kan använda:
=$title?>
... i dina mallar istället för ...
Det finns bara 0b10 sorters människor;
de som förstår binär och de som inte gör det.
Härifrån kan heltal anges i decimal (bas 10), hexadecimal (bas 16), oktal (bas 8) eller binär (bas 2) notering, eventuellt föregången av ett tecken (- eller +). För att använda oktal notering, före nummeret med 0 (noll). För att använda hexadecimal notering, före nummeret med 0x. För att använda binär notering, före nummeret med 0b.
Exempel: Representation av nummer 31 (decimal).
eko 0b11111; // binär, introducerad i PHP 5.4 echo 31; // duh echo 0x1f; // hexadecimalt eko 037; // oktal
Typhinting är för dem som vill göra PHP till ett starkare typat språk. Typ Hints kan bara vara av objekt
och array
skriv sedan PHP 5.1, och inlösbara
sedan PHP 5.4. Traditionell typ hinting med int
och sträng
stöds ännu inte.
funktion my_function (callable $ x) return $ x (); funktionen my_callback_function () return Hello Nettuts!; class Hej statisk funktion hi () return Hej Nettuts! '; klass Hej funktion hej my_function (funktion () returnera "Hello Nettuts! ';); // anonym funktion echo my_function ('my_callback_function'); // återuppringningsfunktion echo my_function (['Hej', 'hej']); // klassnamn, statisk metod echo my_function ([(nytt Hej), "hej"]); // klassobjekt, metodnamn
$ _SERVER [ 'REQUEST_TIME_FLOAT']
har tillsatts, med mikrosekunder precision (float). Detta är användbart när du behöver beräkna exekveringstiden för ett skript.
eko "Executed in", round (mikrotime (true) - $ _SERVER ['REQUEST_TIME_FLOAT'], 2), s ';
__destruera()
(eller sammanfattning)Sammantaget erbjuder PHP 5.4 många förbättringar. Nu är det upp till dig att ta en ny kopia från php.net och göra kvalitetsobjektorienterad PHP-kod!
?