Čo je nové v PHP 5.4?

1. marca konečne nastal čas: Viac ako dva a pol roka po vydaní verzie 5.3.0 oznámili správcovia vydaní novej verzie Stas Malyshev a David Soria Parra dostupnosť PHP verzie 5.4.0. S pomocou ôsmich kandidátov na vydanie bola táto verzia od polovice októbra minulého roku dolaďovaná. Verzia 5.4.0 obsahuje veľa veľkých nových funkcií a menších vylepšení, je rýchlejšia a štíhlejšia, ale prináša so sebou aj zoznam nových funkcií, ktoré môžu vyžadovať zmeny vo vašom vlastnom kóde. Aj keď zoznam nových funkcií nie je zvlášť dlhý, niekoľko vecí sa zmenilo. Po vydaní verzie 5.3 sa na PHP 6 skutočne pracovalo, čo prezrádzajú rôzne predtým avizované, ale nikdy nepublikované knižné tituly. Ale po mesiacoch práce na zásadnom prechode na UTF-16 bola táto trasa z rôznych dôvodov zamietnutá. Mnoho ďalších funkcií zostalo a zostalo zachovaných pre 5.4 a ďalších 5.x.

webový server

Jarné upratovanie

PHP 5.4 už nepodporuje ani nevyžaduje automatickú verziu 2.13 vydanú v roku 1999, ktorú poskytujú distribúcie iba kvôli niekoľkým balíkom. Teraz sú podporované verzie od 2.59, zatiaľ čo sú odporúčané verzie 2.60 alebo novšie. Posledne uvedené by malo byť dostupné v každej modernej distribúcii Linuxu, ale efekty nie sú kritické a mali by mať vplyv iba na výstup pomoci volania ./configure. To samozrejme ovplyvňuje iba proces zostavovania PHP a pre používateľa má malý význam.

Je však potrebné poznamenať vynechané funkcie a možnosti, z ktorých najrozšírenejšie boli pravdepodobne smernice INI safe_mode (a všetky s tým súvisiace), magic_quotes_gpc, allow_call_time_pass_reference a register_globals/register_long_arrays, ktoré však boli všetky označené ako zastarané v 5.3.0 . safe_mode je už dlho kritizovaný za to, že zvyšuje bezpečnosť iba nepatrne, ale zároveň sprostredkuje nesprávny obraz bezpečnosti a predovšetkým spôsobí veľa problémov s konfiguráciou. magic_quotes_gpc, register_globals a register_long_arrays boli na druhej strane vo väčšine zbierok dlhodobo vypínané v súlade s osvedčenými postupmi a ich použitie sa obviňuje.

Zoznam odstránených funkcií je obmedzený na nasledovné: define_syslog_variables (), import_request_variables (), session_register (), session_unregister () a session_is_registered () zhruba súvisia s globálnym poskytovaním premenných požiadaviek prostredníctvom register_globals a podobne, a sú preto zastarané. Boli tiež odstránené rôzne funkcie mysqli_ *, ale nie všetky. Ďalej rozšírenia MySQL mysql, mysqli a PDO_mysql teraz predvolene používajú aktuálnu knižnicu mysqlnd. Zastaraný súbor libmysql sa dá stále používať, musí sa však tiež kompilovať.

Za zmienku stojí aj spracovanie časových pásiem. Bez zadania date.timezone v php.ini alebo použitia funkcie date_default_timezone_set () už nie je uhádnuté časové pásmo, ale ako predvolená hodnota sa používa UTC. Ďalej neexistuje podpora pre putenv ("TZ = ...").

Staršia prípona sqlite2 ext/sqlite bola odstránená z predvolenej inštalácie, ale oveľa častejšie používané prípony ext/sqlite3 a ext/pdo_sqlite zostávajú nedotknuté. Stále ich možno nájsť v priečinku/pecl/v zdrojovom kóde (nezamieňať s úložiskom PECL, v ktorom sa pôvodne nachádzali).

Aby sme ich v blízkej budúcnosti zrušili, funkcie mcrypt_generic_end () a mysql_list_dbs () boli označené ako zastarané. 5.4 bude tiež poslednou verziou PHP, ktorá obsahuje balíčky Windows pre Windows XP a Windows 2003.

Fragment kódu v zozname 1 by mal v PHP 5.3 výstup presne opačný, teda true/false pre isset ()/empty (). Nielen reťazce sú ovplyvnené ako vyrovnania, ale dvojité, logické a nulové hodnoty tiež spôsobujú správy E_NOTICE. Na druhej strane posunutia reťazcov, ktoré je možné pomocou automatického vysielania PHP vrhať na celé čísla (napr. „12,3“ alebo „5 foo“), generujú E_NOTICE, ale stále sa prevádzajú na 12 alebo 5, a teda „fungujú“. Použitie superglobálov ako názvov parametrov, ako napríklad v nasledujúcom príklade, teraz vedie k závažnej chybe pri prevode polí na reťazec (ktorý viedol k reťazcu s poľom obsahu), možno doteraz nepozorovane:

Ak konverzia teraz tiež generuje E_NOTICE, správanie sa zachová z dôvodu spätnej kompatibility.

Použitie array_combine (array (), array ()) má teraz za následok prázdne pole namiesto FALSE, ako by sa dalo očakávať, a nastavenie vlastnosti na premennú, ktorá je NULL, false alebo prázdny reťazec, má za následok E_WARNING, namiesto E_STRICT.

Úroveň chyby E_ALL teraz predvolene obsahuje E_STRICT; Jedna z najviac diskutovaných zmien, aj keď aj tu sa vývojárom už roky odporúča vyvíjať s maximálnou úrovňou chýb, aby neprehliadli varovania, nech sa zdajú byť neškodné. Tu sa stáva problematickým, ak je na rozdiel od odporúčaní v opačnom prípade v živej prevádzke nastavená možnosť display_errors = On a zobrazia sa varovania E_STRICT, ktoré sú teraz obsiahnuté v E_ALL.

Čoraz výraznejšou tendenciou v diskusiách o e-mailovej konferencii vývojárov je neurobiť pre používateľa konfigurovateľné žiadne základné chovanie stroja PHP. Toto sa nepoužíva na obmedzenie funkčnosti, ale iba na zabránenie prekvapeniam, ako je napríklad skutočnosť, že aplikácie reagujú úplne odlišne, v závislosti od toho, ako vyzerá použitý php.ini. Vyššie uvedené smernice magic_quotes_gpc a register_globals boli tu najdôležitejším krokom, ale v procese boli tiež zrušené y2k_compliance, session.bug_compat_42 a session.bug_compat_warn.

[header = Stránka 2: Najdôležitejšie funkcie]

Najdôležitejšie vlastnosti

Najdlhšie diskutovanou funkciou je tzv. Vlastnosť. Navrhol ich Stefan Marr v roku 2008 pod nadpisom „Horizontálne opätovné použitie“ a museli dokonca prežiť dva RFC a rôzne dlhé diskusie o zozname adries Internals. Steve Cook sa zaslúži o vetu „Viacnásobné dedičstvo je dobré, ale neexistuje dobrý spôsob, ako to urobiť.“ A za črty vďačí myšlienka implementovať viacnásobné dedičstvo takým spôsobom, že výhody prevažujú nad nevýhodami [1]. Podrobnosti o implementácii znakov nájdete v časti [2]. Ako príklad tu môže slúžiť niekoľko tried, z ktorých všetky by mali byť schopné zaznamenávať určité akcie, ale nezdieľajú hierarchiu dedičstva, a preto duplikujú alebo zapuzdrujú rovnakú funkcionalitu (zoznam 2).

PHP 5.4 konečne získalo interný webový server, ktorý môže robiť dobrú prácu pri vývoji. Nemalo by sa to však produktívne používať iba z dôvodu výkonu, pretože webový server vybavuje všetky požiadavky jeden za druhým (vrátane integrovaných štýlov, grafických súborov a súborov JavaScriptu). Dá sa tiež predpokladať, že táto nová funkcia nebola v cykle vydania natoľko testovaná, ako zmeny, ktoré sa používajú pri prevádzke vlastnej aplikácie v novej verzii. Dokumentácia tiež výslovne neodporúča produktívne použitie.

Interný webový server sa volá na príkazovom riadku pomocou príkazu php -S hostname: port. Tu hostname: port by mal byť normálne niečo ako localhost: 81. Aby bol webový server dostupný aj zvonka, dá sa použiť aj 0,0.0.0:81. Aktuálny adresár sa potom použije ako DocumentRoot, ale tento je možné alternatívne nastaviť explicitne argumentom -t pri štarte. Je tiež možné určiť skript PHP ako posledný argument, ktorý predstavuje minimálny predný radič. Výpis 3 zobrazuje príklad z dokumentácie.

Súbory, ktoré sú obrázkami podľa prípony, sa doručia priamo sem, inak sa obsah jednoducho vráti. To možno vykonať pomocou priameho výstupu alebo include/require. Zložitejšie nastavenia, ako napríklad v aplikáciách s mnohými mod_rewrite, by mali byť s určitou námahou prenosné. Bohužiaľ stále neexistuje všeobecne známe a rýchle riešenie. Pretože však väčšina súčasných rámcov všetky úlohy vykonáva v súbore DocumentRoot pomocou index.php, úsilie by malo byť obmedzené.

Webový server sa považuje za samostatný SAPI (Server API) s názvom cli-server, ale je tiež binárnym súborom CLI z hľadiska správania, a preto nepoužíva rovnaké php.ini ako binárny súbor CGI/FastCGI, ktorý sa zvyčajne používa na webovom serveri. Voľba -c pri štarte vám umožňuje použiť požadované php.ini aj tu. Farebný výstup na príkazovom riadku je možné tu aktivovať aj pomocou cli_server.color. PHP tiež podporuje syntax krátkeho poľa podobnú syntaxe JavaScriptu alebo iných jazykov. Úvod: namiesto => bol vynechaný, zápis [] možno jednoducho chápať ako krátku formu array () (zoznam 4).

Ďalšie funkcie

Existovalo tiež veľa menších funkcií, ktoré by celkovo mohli zjednodušiť život programátora PHP. Teraz existuje typ volajúci, ktorý umožňuje parametre, ktoré spĺňajú rovnaké kritériá, aké kontroluje funkcia is_callable (). Väčšinou sa jedná o uzávery a reťazce, ktoré obsahujú názvy funkcií, ale podporovaná je aj notácia poľa vo formáte pole („trieda“, „metóda“) alebo pole ($ objekt, „metóda“). Celé to slúži na zjednodušenie spracovania uzávierok bez ďalších volaní na is_callable () (zoznam 5). Podľa očakávania sa zobrazuje „Hello, World!“. Toto „dereferencovanie poľa“ samozrejme funguje, aj keď sa vráti asociatívne alebo zmiešané pole.

Binárne čísla je teraz možné zapisovať v tvare 0b101010, podobne ako je možné zapisovať hexadecimálne čísla v tvare 0x2a. Krátka forma