A PHP 5.4 újdonságai
Március 1-jén végre eljött az idő: Több mint két és fél évvel az 5.3.0 verzió kiadása után az új verzió kiadáskezelői, Stas Malyshev és David Soria Parra bejelentették a PHP 5.4.0 verziójának elérhetőségét. Nyolc felszabadító jelölt segítségével ezt a verziót tavaly október közepe óta finomították. Az 5.4.0 verzió sok nagy új funkciót és kisebb fejlesztéseket tartalmaz, gyorsabb és karcsúbb, de új funkciók listáját is magával hozza, amelyekhez szükség lehet a saját kódjának megváltoztatására. Még akkor is, ha az újítások listája nem különösebben hosszú, néhány dolog megváltozott. Az 5.3 verzió kiadása után a PHP 6-on valóban dolgoztak, amint azt a korábban korábban bejelentett, de soha nem publikált könyvcímek felfedik. De az UTF-16-ra való áttérés hónapjaiban végzett munka után ezt az utat különböző okok miatt elutasították. Sok más funkció megmaradt, és megmaradt az 5.4 és a további 5.x verzióknál.

Tavaszi nagytakarítás
A PHP 5.4 már nem támogatja vagy igényli az 1999-ben kiadott 2.13-as autoconf verziót, amelyet csak a disztribúciók nyújtanak, csak egy maroknyi csomag miatt. A 2.59-es verziók már támogatottak, míg a 2.60 vagy újabb ajánlott. Ez utóbbinak elérhetőnek kell lennie minden modern Linux disztribúcióban, de a hatások nem kritikusak, és csak a ./configure hívás kimeneti kimenetét kell, hogy befolyásolják. Természetesen ez csak a PHP felépítési folyamatát érinti, és a felhasználó számára kevés jelentőségű.
Meg kell azonban jegyezni a kihagyott funkciókat és opciókat, amelyek közül a legelterjedtebbek valószínűleg az INI safe_mode (és minden kapcsolódó) irányelvek, magic_quotes_gpc, allow_call_time_pass_reference és register_globals/register_long_arrays voltak, amelyeket azonban mind elavultnak jelöltek az 5.3.0-ban. . A safe_mode-t már régóta kritikák miatt emelték csak jelentéktelen mértékben a biztonságot, ugyanakkor rossz biztonsági képet közvetítettek, és mindenekelőtt sok problémát okoztak a konfigurációval. A magic_quotes_gpc, a register_globals és a register_long_arrays viszont a legtöbb kollekcióban hosszú ideig következetesen kikapcsolták a bevált gyakorlatoknak megfelelően, és használatukat rosszallották.
Az eltávolított függvények listája a következőkre korlátozódik: define_syslog_variables (), import_request_variables (), session_register (), session_unregister () és session_is_registered () nagyjából kapcsolódnak a register_globals és hasonlókon keresztüli kérési változók globális biztosításához, ezért elavultak. Különféle mysqli _ * funkciókat is eltávolítottak, de nem mindegyiket. Ezenkívül a MySQL kiterjesztések, a mysql, a mysqli és a PDO_mysql alapértelmezés szerint a jelenlegi mysqlnd könyvtárat használják. Az elavult libmysql továbbra is használható, de be is kell fordítani.
Az időzónák kezelése szintén említést érdemel. Anélkül, hogy megadná a date.timezone fájlt a php.ini fájlban, vagy a date_default_timezone_set () függvényt használja, az időzóna már nem kitalálható, de az UTC-t használja alapértelmezett értékként. Ezenkívül a putenv ("TZ = ...") nem támogatott.
A régebbi sqlite2 kiterjesztést az ext/sqlite eltávolította az alapértelmezett telepítésből, de a sokkal gyakrabban használt ext/sqlite3 és ext/pdo_sqlite kiterjesztéseket ez nem érinti. Ezek továbbra is megtalálhatók a/pecl/mappában a forráskódban (nem tévesztendő össze azzal a PECL adattárral, amelyben eredetileg voltak).
A közeljövőben meg kell szüntetni, az mcrypt_generic_end () és a mysql_list_dbs () függvényeket elavultként jelölték meg. Ezenkívül az 5.4 lesz az utolsó PHP verzió, amely Windows XP és Windows 2003 rendszerhez tartalmaz Windows-csomagokat.
Az 1. listában szereplő kódrészlet éppen az ellenkezőjét eredményezné a PHP 5.3-mal, vagyis true/false az isset ()/empty () számára. Azonban nem csak a karakterláncok, mivel az eltolások érintettek, a kettős, logikai és nulla értékek E_NOTICE üzeneteket is okoznak. Másrészt a karakterlánc-eltolások, amelyek a PHP automatikus továbbításával egész értékekre vetíthetők (pl. '12 .3 'vagy' 5 foo ') létrehoznak egy E_NOTICE-t, de így is 12-re vagy 5-re konvertálódnak, és így „működnek". A szuperglobális paraméterek névként történő használata, például a következő példában, végzetes hibához vezet, amikor a tömböket karakterláncokká konvertálják (ami a tartalmi tömböt tartalmazó karakterlánchoz vezetett), valószínűleg eddig észrevétlenül:
Ha az átalakítás most E_NOTICE-t is generál, akkor a visszamenőleges kompatibilitás miatt a viselkedés megmarad.
Az array_combine (array (), array ()) használata most üres tömböt eredményez a FALSE helyett, amint az elvárható lenne, és egy tulajdonság beállításával egy változóra, amely NULL, false vagy üres karakterlánc, az E_WARNING, az E_STRICT helyett.
Az E_ALL hibaszint alapértelmezés szerint tartalmazza az E_STRICT értéket; Az egyik legvitatottabb változás, bár itt is a fejlesztőknek évek óta azt tanácsolják, hogy a maximális hibaszint mellett fejlesszenek, hogy ne hagyják figyelmen kívül a figyelmeztetéseket, bármennyire is ártalmatlannak tűnhetnek. Itt problematikussá válik, ha az ellentétes ajánlásokkal ellentétben a display_errors = On opció aktív állapotban van beállítva, és az E_ALL-ban most található E_STRICT figyelmeztetések jelennek meg.
A fejlesztői levelezőlistán folytatott beszélgetésekben egyre hangsúlyosabb tendencia nem az, hogy a PHP motor alapvető viselkedését konfigurálhatóvá tegye a felhasználó számára. Ezt nem a funkcionalitás korlátozására használják, hanem csak a meglepetések elkerülésére, például arra, hogy az alkalmazások teljesen eltérően reagálnak, attól függően, hogy a használt php.ini hogyan néz ki. A fenti magic_quotes_gpc és register_globals irányelvek voltak a legfontosabb lépés itt, de az y2k_compliance, session.bug_compat_42 és session.bug_compat_warn is megszűnt a folyamat során.
[header = 2. oldal: A legfontosabb jellemzők]
A legfontosabb jellemzők
A leghosszabban megvitatott jellemző az úgynevezett vonások. Stefan Marr már 2008-ban javasolta őket "Vízszintes újrafelhasználás" címszó alatt, sőt két RFC-t és különféle hosszú beszélgetéseket is túl kellett élniük az Internals levelezőlistán. Steve Cook nevéhez fűződik a mondat: "A többszörös öröklés jó, de erre nincs jó módszer." És a tulajdonságok azon az ötleten alapulnak, hogy a többszörös öröklést úgy valósítsák meg, hogy az előnyök felülmúlják a hátrányokat [1]. A tulajdonságok megvalósításának részletei a [2] alatt találhatók. Számos osztály szolgálhat példaként itt, amelyek mindegyikének képesnek kell lennie bizonyos műveletek naplózására, de nem osztoznak öröklési hierarchiában, ezért vagy ugyanazon funkciót lemásolják, vagy beágyazzák (2. lista).
A PHP 5.4 végül kapott egy belső webszervert, amely jó munkát végezhet a fejlesztésben. Márpedig önmagában teljesítmény okokból nem szabad produktívan használni, mivel a webszerver az összes kérést egymás után kezeli (beleértve az integrált stíluslapokat, grafikákat és JavaScript fájlokat). Feltételezhető az is, hogy ezt az új szolgáltatást nem tesztelték annyira a kiadási ciklusban, mint azokat a változtatásokat, amelyeket a saját alkalmazás működésében használnak az új verzión. A dokumentáció szintén kifejezetten nem javasolja a produktív felhasználást.
A belső webszervert a parancssorba hívják meg a php -S hostname: port paranccsal. Itt a hosztnév: portnak általában valami hasonlónak kell lennie, mint a localhost: 81. Ahhoz, hogy a webszerver kívülről is elérhető legyen, 0.0.0.0:81 is használható. Ezután az aktuális könyvtárat használják DocumentRoot néven, de ezt alternatív megoldásként kifejezetten be lehet állítani indításkor a -t argumentummal. Lehetőség van megadni egy PHP szkriptet is, mint utolsó argumentumot, amely egy minimális elülső vezérlőt képvisel. A 3. lista egy példát mutat a dokumentációból.
A fájlok, amelyek fájlkiterjesztésük szerint képek, közvetlenül ide kerülnek, ellenkező esetben a tartalom egyszerűen visszakerül. Ez történhet közvetlen kimeneten keresztül, vagy tartalmazza/igényelheti. A bonyolultabb beállításoknak, például a sok mod_rewrite-t használó alkalmazásoknak, bizonyos erőfeszítéssel hordozhatónak kell lenniük. Sajnos még mindig nincs általánosan ismert, gyors megoldás. De mivel a legtöbb jelenlegi keretrendszerben az index.php minden feladatot elvégez a DocumentRoot-ban, az erőfeszítéseket korlátozni kell.
A webkiszolgáló külön SAPI-nak (Server API) tekinthető, amelynek neve cli-server, de viselkedése szempontjából szintén CLI bináris, ezért nem ugyanazt a php.ini-t használja, mint a webkiszolgálóban általában használt CGI/FastCGI bináris fájl. Az -c opció indításkor itt is lehetővé teszi a kívánt php.ini használatát. A parancssori parancssorban található színes kimenet itt is aktiválható a cli_server.color oldalon. A PHP egy rövid tömb szintaxist is támogat, hasonlóan a JavaScripthez vagy más nyelvekhez. A => helyett bevezettük a (z) elhagyását, a [] jelölést egyszerűen a tömb () rövid alakjának lehet felfogni (4. lista).
További funkciók
Sok kisebb funkció is volt, amelyek nagyjából leegyszerűsíthetik a PHP programozó életét. Megvan a hívható typehint, amely lehetővé teszi azokat a paramétereket, amelyek megfelelnek az is_callable () függvény által ellenőrzött feltételeknek. Ezek többnyire bezárások és karakterláncok, amelyek függvényneveket tartalmaznak, de a tömb jelölése a tömb ('class', 'method') vagy a tömb ($ object, 'method') formában szintén támogatott. Az egész a bezárások egyszerűbb kezelését szolgálja az is_callable () további hívások nélkül (5. lista). A várakozásoknak megfelelően a „Helló, világ!” Kimenet. Természetesen ez a "tömbdereferencia" akkor is működik, ha asszociatív vagy vegyes tömböt adunk vissza.
A bináris számok mostantól 0b101010 alakban is írhatók, hasonlóan ahhoz, ahogy a hexa számokat 0x2a formában írhatjuk. A rövid forma