SlideShare una empresa de Scribd logo
1 de 27
27/1
A PHP 5.5 újdonságai
Kovács Ferenc
http://tyrael.hu/
http://twitter.com/Tyr43l
tyrael@php.net
Developer @ http://ustream.tv/
27/2
Roadmap
● 5.3.0 – 2009.06.30
● 5.4.0 – 2012.03.01
● 5.5.0 – 2013 Q2
27/3
Roadmap
● https://wiki.php.net/rfc/releaseprocess
– Évenkénti kiadások (minor vagy major verzió)
– 3 év támogatás a megjelenéstől számítva
● 2 évig hiba és biztonsági javítások
● +1 évig biztonsági javítások
● https://wiki.php.net/rfc/php53eol
– Az 5.5 megjelenését követően az 5.3-höz már csak a
biztonsági javítások jönnek 1 évig.
27/4
Roadmap
● Az eredeti roadmap: https://wiki.php.net/todo/php55
● Elméletileg január 31 lett volna a beta1 (Feature Freeze).
● Gyakorlatilag március 31 lett belőle.
● A csúszás egyik legnagyobb oka a Zend Opcache feltűnése.
● Q1 helyett Q2 lesz a végleges kiadás időpontja a szükséges
beta/RC-k számától függően.
● Tehát az 5.3 EOLed lesz ~2014 Q2-től.
27/5
Finally
27/6
Finally
● A finally minden esetben(siker, el nem kapott
kivétel,return) meghívódik, kivéve a fatális hibákat.
● Így a legegyszerűbb megoldani, hogy minden
esetben feltakarítson maga után a kódunk (temp
fájlok törlése, lock elengedése, etc.).
● Egymásba ágyazott try blokkok esetén belülről
kifelé(fentről lefelé) haladó sorrendben hívódnak
meg a finally-k.
27/7
Generátorok
27/8
Generátorok
● 1-1 sor lekérdezése belekerülhetne a ciklusba, de az csúnya, nem érdekel
minket honnan, vagy hogyan jön az adat, mi fel akarjuk dolgozni.
● getFilesFromFile() visszatérhetne egyben az egész tömbbel, de az
feleslegesen emelné a peak memória használatot, plusz nem biztos, hogy
mindig csak véges elemszámot tudnánk generálni.
● getFilesFromFile() visszatérhetne egy iterátorral ami már jó, nem kell
egyszerre sok memóriát allokálni, és megvalósítható a végtelen elemszám
generálása is de elég sok boilerplate kell hozzá, plusz szembemegy a PHP
multiparadigmás elveivel, ha csak így lehet megoldani.
27/9
Generátorok
●
A yield-et tartalmazó függvény első hívásakor egy Generator példánnyal tér vissza, amely egy
Iterator-t valósít meg.
●
A Generator osztály nem példányosítható manuálisan.
●
A visszakapott Generator bejárása meghívja(folytatja) a függvény futását a következő yield-ig,
amelynek az értékével visszatér.
●
Ez a pingpong megy amíg nem jön egy return; a Generatorból, vagy el nem fogynak a yieldek,
vagy abba nem hagyja a hívó az iterálást, vagy nem jön egy a generátorban el nem kapott
Exception.
● Yield dobhat kulcs => érték párt, illetve mind érték mind referencia szerint.
● A Generator példány send metódusának hívásával lehet adatot is küldeni a generátor
függvénynek, ez ugyanúgy lépteti az iterációt és a függvénytörzsben a yield visszatérési
értékeként érkezik meg a küldött adat.
●
A Generator példány throw metódusával lehet kivételt is dobni kívülről, amit ugyanúgy lépteti az
iterációt, ha a függvénytörzsben elkapódik a kivétel, akkor a következő elem jön vissza, ha nem,
akkor a kivétel.
27/10
Opcache
●
A Zend az Optimizer+ nevű fizetős opcode cache-ét tette nyílt forrásúvá, és (alapból
kikapcsoltan) be fog kerülni az 5.5-be core ext-ként.
● A core fejlesztők között van több jelenlegi/ex Zend alkalmazott, aki ismeri a
kódbázist, a kódnyitás után elég sokan kezdék el nézegetni, talán több aktív
fejlesztője lesz, mint az APCnek.
●
Sajnos a Zend stackben nem használnak Thread Safe SAPI-t, szóval TS
környezetben akad még vele munka, de elméletileg dolgoznak az ügyön.
●
Mivel a core része, ezért jó esetben nem jöhet ki úgy új kiadás, hogy nincs hozzá
vagy törött az opcode cache támogatás (PHP 5.4 /o).
●
Data Cache funkciót nem tartalmaz, az APC ezen részét nem váltja ki,de
folyamatban van egy kicsontozott APC fejlesztése, ami csak változók tárolására
használható az APC-vel azonos API-n keresztül: https://github.com/krakjoe/apcu
●
Az APC fejlesztése valószínűleg le fog lassulni, meg fog állni.
27/11
Opcache
● opcache.enable (default "1")
● opcache.memory_consumption (default "64")
● opcache.interned_strings_buffer (default "4")
● opcache.max_accelerated_files (default "2000")
● opcache.max_wasted_percentage (default "5")
● opcache.use_cwd (default "1")
● opcache.validate_timestamps (default "1")
● opcache.revalidate_freq (default "2")
● opcache.revalidate_path (default "0")
● opcache.save_comments (default "1")
● opcache.load_comments (default "1")
● opcache.fast_shutdown (default "0")
● opcache.enable_file_override (default "0")
● opcache.optimization_level (default "0xffffffff")
● opcache.inherited_hack (default "1")
● opcache.blacklist_filename (default "")
● opcache.max_file_size (default "0")
● opcache.consistency_checks (default "0")
● opcache.force_restart_timeout (default "180")
● opcache.error_log (default "" which means stderr)
● opcache.log_verbosity_level (default "1")
● opcache.preferred_memory_model (default "")
● opcache.protect_memory (default "0")
● opcache.mmap_base (Windows-only)
27/12
Egyszerűsített jelszó hash API
27/13
Egyszerűsített jelszó hash API
● array password_get_info ( string $hash )
– Visszaad egy tömböt: algo, algoName és options elemekkel.
● string password_hash ( string $password , integer $algo [, array $options ] )
● boolean password_needs_rehash ( string $hash , string $algo [, string $options
] )
● boolean password_verify ( string $password , string $hash )
● $options a salt-ot és a cost-ot tartalmazhatja jelenleg.
● algo PASSWORD_BCRYPT illetve PASSWORD_DEFAULT értékeket fogadja,
ahol a bcrypt az alapértelmezett. A későbbi verziókban ez a lista bővülhet (pl.
scrypt) illetve a default is változhat.
27/14
Tömbök
● array_column()
– többdimenziós tömbből lehet vele visszakérni minden
sorból egy megadott oszlophoz tartozó értékek listáját.
● Egy Iterator key() függvényéből visszaadott tömb/object már
használható a foreach fejlécben közvetlenül.
● Foreach fejlécben a list() mostantól szabadon használható az
aktuális iterációhoz tartozó elem kibontására.
27/15
Config
● sys_temp_dir
– Alapértelmezett temp dir adható meg.
– Ha ki van töltve, akkor ezt használja a php az OS specifikus
találgatás helyett.
● intl.use_exceptions
– Szabvány php hibák helyett kivételt dobjanak-e az intl funkciók
hiba esetén.
● mysqlnd.sha256_server_public_key
– Mysql SHA256 auth támogatáshoz a szerver nyilvános
kulcsának helye.
27/16
Biztonság
● FILTER_VALIDATE_MAC, FILTER_SANITIZE_MAC
● hash_pbkdf2()
– hash függvény pbkdf2 alapokon, kötelezően meg kell adni a
használni kívánt hash algot, egy salt-ot és egy iterációszámot.
● openssl_pbkdf2()
– ugyanezt tudja, van rá némi esély, hogy ez nem éri meg a
release-t.
● A /e kapcsoló a preg_replace() hívásban (preg_replace_callback
javasolt helyette).
27/17
mysqli
● mysqli_begin_transaction()
● mysqli_savepoint()
● mysqli_release_savepoint()
27/18
gd
● Összefésülésre került a GD bitbucket tárolós és a php repóban lévő
verzió kódja.
● Új függvények(illetve tartozik hozzájuk egy kupac konstans is):
– imageflip()
– imagecrop()
– imagecropauto()
– imagesetinterpolation()
– imageaffine()
– imageaffinematrixget()
– imageaffinematrixconcat()
– imagescale()
27/19
curl
● Új függvény: curl_file_create
● Új osztály: CURLFile
● Új konstans: CURLOPT_SAFE_UPLOAD
● Fájlfeltöltés 5.5 előtt:
curl_setopt($curl_handle, CURLOPT_POST, 1);
$args['file'] = '@/path/to/file';
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
● Fájlfeltöltés 5.5ben:
curl_setopt($curl_handle, CURLOPT_POST, 1);
$args['file'] = new CurlFile('filename.png', 'image/png');
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
● A régi működés kikapcsolható a CURLOPT_SAFE_UPLOAD
27/20
intl
● Uconverter osztály:
– Karakterkódolások között lehet oda-vissza
konvertálgatni szöveget.
– mb_convert_encoding()-hez képest extraként
megadható, hogy megadható, hogy mi történjen
az alapból nem leképezhető karakterekkel.
● rengeteg további intl/ICU okosítás(75 új függvény),
cserébe ICU követelmény felkúszott >= 4.0-ra.
27/21
date
● Új DateTimeInterface interface.
● Új DateTimeImmutable osztály
– DateTime-mal szemben nem módosítja saját
magát, csak visszatér a módosult példánnyal,
● Mind a DateTime, mind a DateTimeImmutable a
DateTimeInterface megvalósítása.
27/22
sockets
●
Sendmsg(), recvmsg(), socket_cmsg_space()
– kiegészítő adatokat lehet vele küldeni, fogadni(lásd konstansok).
●
IPV6_PKTINFO
● IPV6_RECVPKTINFO
● IPV6_HOPLIMIT
● IPV6_TCLASS
● IPV6_RECVTCLASS
●
SCM_RIGHTS
●
SCM_CREDENTIALS
● SO_PASSCRED
27/23
42
● 'The answer to life, the universe and everything'[0]
● array(42 =>'The answer to life, the universe and everything')[42]
● Abszolút osztálynév feloldás a class konstans használatával:
echo ClassName::class; // 'ANamespacedClassName'
● cli_get_process_title/cli_set_process_title: cli processzhez tartozó cím (ami ps kimenetben,
ablakfejlécben, etc. látszik) lekérdezhető és beállítható lesz minden nagyobb platformon.
● set_error_handler/set_exception_handler NULL callbackkel hívva visszaállítja a gyári handlert és
visszatér az utoljára beállítottal.
● boolval()
● Az empty() mostantól kifejezések vizsgálatára is használható.
● Systemtap támogatás, az 5.3-ban hozzáadott dtrace probe-ok mostantól systemtap-en keresztül is
elérhetőek.
● Az új Apache 2.4 handler támogatott lett windowson.
● Max-Age attribútum minden php-ből kreált sütire.
27/24
Ami felmerült, de végül kimaradt
●
Accessors
– https://wiki.php.net/rfc/propertygetsetsyntax-v1.2
●
DateTime::__toString()
– https://wiki.php.net/rfc/datetime_tostring
●
Escaper
– https://wiki.php.net/rfc/escaper
●
Annotációk DocBlock alapokon
– https://wiki.php.net/rfc/reflection_doccomment_annotations
– https://wiki.php.net/rfc/annotations-in-docblock
●
Opcionális paraméterek default értékének használata a hívásnál
– https://wiki.php.net/rfc/skipparams
●
Függvényhívás paraméterlista végén vessző elfogadása
– https://wiki.php.net/rfc/trailing-comma-function-args
● „assuming $this from incompatible context” ellenjavalttá tétele
– https://wiki.php.net/rfc/incompat_ctx
●
(new Foo)->bar = 'baz'
– http://www.mail-archive.com/internals@lists.php.net/msg64194.html
●
„Pure-code” php fájlok
– https://wiki.php.net/rfc/phpp
● array_part()
– https://wiki.php.net/rfc/array_part
27/25
Ami kimaradt, de szerintem igény 
lenne rá
● AST alapú parser
– https://wiki.php.net/rfc/ast_based_parsing_compilation_process
● Natív, teljes körű Unicode támogatás
● Typehint skaláris típusokra is
– A Fatal error-os formában nem valószínű hogy valaha is bekerül.
● Kivétel alapú hibakezelés
– Nem tudja kiváltani a jelenlegi infrastruktúrát, plusz nem illeszkedik a multiparadigmás imázsba.
– https://github.com/ircmaxell/ErrorExceptions
● Chainelhető user error/exception handlerek
– Mint ahogy pl. most az spl autoloader működik.
● Skalár objektek
– https://github.com/nikic/scalar_objects
● Thread kezelés
– http://pecl.php.net/package/pthreads
● PDO2
27/26
Visszafelé nem(teljesen) kompatibilis 
változások
● ext/mysql (ext/mysqli javasolt helyette)
● mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb() (mcrypt_generic/mdecrypt_generic
használható helyette).
● Bugfix: unpack("a5", "str00") 5.5 előtt 3 hosszú stringet adott vissza, 5.5től a helyes 5 hosszú NUL
paddolt stringet, a 'Z' kapcsolóval elérhető a régi hibás viselkedés továbbra is.
● A függvények, osztályok és konstans nevek belső case insensitive-ségének biztosítása mindig ASCII
szabályok szerint történik ezentúl (pl. török locale-lel voltak korábban problémák:
https://bugs.php.net/bug.php?id=18556).
● Windows XP és 2003 támogatása megszűnik.
● php_logo_guid(), php_egg_logo_guid(), php_real_logo_guid(), zend_logo_guid() függvények
eltávolításra kerültek, helyettük data url-ek használata javasolt.
● --with-curlwrappers configure kapcsoló és az ehhez tartozó experimental kód eltávolításra került.
● '@/path/to/file' típusú curl fájlfeltöltés ellenjavalttá vált.
● IntlDateFormatter::setTimeZoneID() és datefmt_set_timezone_id() ellenjavalttá vált. A
IntlDateFormatter::setTimeZone() vagy a datefmt_set_timezone() használható helyette.
27/27
Kérdések?

Más contenido relacionado

Similar a A PHP 5.5 újdonságai.

20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtestczras
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentDigital Natives
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Open Academy
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanAntal Orcsik
 
A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségeivvinston
 
Átállás joomla 2.5 joomla 3.3
Átállás joomla 2.5   joomla 3.3Átállás joomla 2.5   joomla 3.3
Átállás joomla 2.5 joomla 3.3Tamas Rigo
 
Led matrix-dokumentáció
Led matrix-dokumentációLed matrix-dokumentáció
Led matrix-dokumentációTamás Mayer
 
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokon
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokonCross Platform mobil app fejlesztés HTML5 JavaScript alapokon
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokoneRise
 
Nagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtNagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtMeetOFF
 
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-beKülső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-beKálmán "KAMI" Szalai
 
Linux Kernel - Bevezetes
Linux Kernel - BevezetesLinux Kernel - Bevezetes
Linux Kernel - BevezetesLevente Kurusa
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseDániel Stein
 
Grid Underground projekt
Grid Underground projektGrid Underground projekt
Grid Underground projektFerenc Szalai
 

Similar a A PHP 5.5 újdonságai. (20)

20111130 oa gtest
20111130 oa gtest20111130 oa gtest
20111130 oa gtest
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails Deployment
 
Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
 
Iptables gyorstalpaló
Iptables gyorstalpalóIptables gyorstalpaló
Iptables gyorstalpaló
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
 
Diagram és barcode
Diagram és barcodeDiagram és barcode
Diagram és barcode
 
A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségei
 
Átállás joomla 2.5 joomla 3.3
Átállás joomla 2.5   joomla 3.3Átállás joomla 2.5   joomla 3.3
Átállás joomla 2.5 joomla 3.3
 
Led matrix-dokumentáció
Led matrix-dokumentációLed matrix-dokumentáció
Led matrix-dokumentáció
 
Dcourse Drupal 6 architecture
Dcourse Drupal 6 architectureDcourse Drupal 6 architecture
Dcourse Drupal 6 architecture
 
A forditonak mindenhez lehet köze
A forditonak mindenhez lehet közeA forditonak mindenhez lehet köze
A forditonak mindenhez lehet köze
 
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokon
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokonCross Platform mobil app fejlesztés HTML5 JavaScript alapokon
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokon
 
Nagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőtNagy Péter: Google App Engine. Programozzunk felhőt
Nagy Péter: Google App Engine. Programozzunk felhőt
 
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-beKülső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
 
Linux Kernel - Bevezetes
Linux Kernel - BevezetesLinux Kernel - Bevezetes
Linux Kernel - Bevezetes
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analízise
 
Sles admin
Sles adminSles admin
Sles admin
 
SZTAKI presentation
SZTAKI presentationSZTAKI presentation
SZTAKI presentation
 
Grid Underground projekt
Grid Underground projektGrid Underground projekt
Grid Underground projekt
 

A PHP 5.5 újdonságai.

  • 2. 27/2 Roadmap ● 5.3.0 – 2009.06.30 ● 5.4.0 – 2012.03.01 ● 5.5.0 – 2013 Q2
  • 3. 27/3 Roadmap ● https://wiki.php.net/rfc/releaseprocess – Évenkénti kiadások (minor vagy major verzió) – 3 év támogatás a megjelenéstől számítva ● 2 évig hiba és biztonsági javítások ● +1 évig biztonsági javítások ● https://wiki.php.net/rfc/php53eol – Az 5.5 megjelenését követően az 5.3-höz már csak a biztonsági javítások jönnek 1 évig.
  • 4. 27/4 Roadmap ● Az eredeti roadmap: https://wiki.php.net/todo/php55 ● Elméletileg január 31 lett volna a beta1 (Feature Freeze). ● Gyakorlatilag március 31 lett belőle. ● A csúszás egyik legnagyobb oka a Zend Opcache feltűnése. ● Q1 helyett Q2 lesz a végleges kiadás időpontja a szükséges beta/RC-k számától függően. ● Tehát az 5.3 EOLed lesz ~2014 Q2-től.
  • 6. 27/6 Finally ● A finally minden esetben(siker, el nem kapott kivétel,return) meghívódik, kivéve a fatális hibákat. ● Így a legegyszerűbb megoldani, hogy minden esetben feltakarítson maga után a kódunk (temp fájlok törlése, lock elengedése, etc.). ● Egymásba ágyazott try blokkok esetén belülről kifelé(fentről lefelé) haladó sorrendben hívódnak meg a finally-k.
  • 8. 27/8 Generátorok ● 1-1 sor lekérdezése belekerülhetne a ciklusba, de az csúnya, nem érdekel minket honnan, vagy hogyan jön az adat, mi fel akarjuk dolgozni. ● getFilesFromFile() visszatérhetne egyben az egész tömbbel, de az feleslegesen emelné a peak memória használatot, plusz nem biztos, hogy mindig csak véges elemszámot tudnánk generálni. ● getFilesFromFile() visszatérhetne egy iterátorral ami már jó, nem kell egyszerre sok memóriát allokálni, és megvalósítható a végtelen elemszám generálása is de elég sok boilerplate kell hozzá, plusz szembemegy a PHP multiparadigmás elveivel, ha csak így lehet megoldani.
  • 9. 27/9 Generátorok ● A yield-et tartalmazó függvény első hívásakor egy Generator példánnyal tér vissza, amely egy Iterator-t valósít meg. ● A Generator osztály nem példányosítható manuálisan. ● A visszakapott Generator bejárása meghívja(folytatja) a függvény futását a következő yield-ig, amelynek az értékével visszatér. ● Ez a pingpong megy amíg nem jön egy return; a Generatorból, vagy el nem fogynak a yieldek, vagy abba nem hagyja a hívó az iterálást, vagy nem jön egy a generátorban el nem kapott Exception. ● Yield dobhat kulcs => érték párt, illetve mind érték mind referencia szerint. ● A Generator példány send metódusának hívásával lehet adatot is küldeni a generátor függvénynek, ez ugyanúgy lépteti az iterációt és a függvénytörzsben a yield visszatérési értékeként érkezik meg a küldött adat. ● A Generator példány throw metódusával lehet kivételt is dobni kívülről, amit ugyanúgy lépteti az iterációt, ha a függvénytörzsben elkapódik a kivétel, akkor a következő elem jön vissza, ha nem, akkor a kivétel.
  • 10. 27/10 Opcache ● A Zend az Optimizer+ nevű fizetős opcode cache-ét tette nyílt forrásúvá, és (alapból kikapcsoltan) be fog kerülni az 5.5-be core ext-ként. ● A core fejlesztők között van több jelenlegi/ex Zend alkalmazott, aki ismeri a kódbázist, a kódnyitás után elég sokan kezdék el nézegetni, talán több aktív fejlesztője lesz, mint az APCnek. ● Sajnos a Zend stackben nem használnak Thread Safe SAPI-t, szóval TS környezetben akad még vele munka, de elméletileg dolgoznak az ügyön. ● Mivel a core része, ezért jó esetben nem jöhet ki úgy új kiadás, hogy nincs hozzá vagy törött az opcode cache támogatás (PHP 5.4 /o). ● Data Cache funkciót nem tartalmaz, az APC ezen részét nem váltja ki,de folyamatban van egy kicsontozott APC fejlesztése, ami csak változók tárolására használható az APC-vel azonos API-n keresztül: https://github.com/krakjoe/apcu ● Az APC fejlesztése valószínűleg le fog lassulni, meg fog állni.
  • 11. 27/11 Opcache ● opcache.enable (default "1") ● opcache.memory_consumption (default "64") ● opcache.interned_strings_buffer (default "4") ● opcache.max_accelerated_files (default "2000") ● opcache.max_wasted_percentage (default "5") ● opcache.use_cwd (default "1") ● opcache.validate_timestamps (default "1") ● opcache.revalidate_freq (default "2") ● opcache.revalidate_path (default "0") ● opcache.save_comments (default "1") ● opcache.load_comments (default "1") ● opcache.fast_shutdown (default "0") ● opcache.enable_file_override (default "0") ● opcache.optimization_level (default "0xffffffff") ● opcache.inherited_hack (default "1") ● opcache.blacklist_filename (default "") ● opcache.max_file_size (default "0") ● opcache.consistency_checks (default "0") ● opcache.force_restart_timeout (default "180") ● opcache.error_log (default "" which means stderr) ● opcache.log_verbosity_level (default "1") ● opcache.preferred_memory_model (default "") ● opcache.protect_memory (default "0") ● opcache.mmap_base (Windows-only)
  • 13. 27/13 Egyszerűsített jelszó hash API ● array password_get_info ( string $hash ) – Visszaad egy tömböt: algo, algoName és options elemekkel. ● string password_hash ( string $password , integer $algo [, array $options ] ) ● boolean password_needs_rehash ( string $hash , string $algo [, string $options ] ) ● boolean password_verify ( string $password , string $hash ) ● $options a salt-ot és a cost-ot tartalmazhatja jelenleg. ● algo PASSWORD_BCRYPT illetve PASSWORD_DEFAULT értékeket fogadja, ahol a bcrypt az alapértelmezett. A későbbi verziókban ez a lista bővülhet (pl. scrypt) illetve a default is változhat.
  • 14. 27/14 Tömbök ● array_column() – többdimenziós tömbből lehet vele visszakérni minden sorból egy megadott oszlophoz tartozó értékek listáját. ● Egy Iterator key() függvényéből visszaadott tömb/object már használható a foreach fejlécben közvetlenül. ● Foreach fejlécben a list() mostantól szabadon használható az aktuális iterációhoz tartozó elem kibontására.
  • 15. 27/15 Config ● sys_temp_dir – Alapértelmezett temp dir adható meg. – Ha ki van töltve, akkor ezt használja a php az OS specifikus találgatás helyett. ● intl.use_exceptions – Szabvány php hibák helyett kivételt dobjanak-e az intl funkciók hiba esetén. ● mysqlnd.sha256_server_public_key – Mysql SHA256 auth támogatáshoz a szerver nyilvános kulcsának helye.
  • 16. 27/16 Biztonság ● FILTER_VALIDATE_MAC, FILTER_SANITIZE_MAC ● hash_pbkdf2() – hash függvény pbkdf2 alapokon, kötelezően meg kell adni a használni kívánt hash algot, egy salt-ot és egy iterációszámot. ● openssl_pbkdf2() – ugyanezt tudja, van rá némi esély, hogy ez nem éri meg a release-t. ● A /e kapcsoló a preg_replace() hívásban (preg_replace_callback javasolt helyette).
  • 18. 27/18 gd ● Összefésülésre került a GD bitbucket tárolós és a php repóban lévő verzió kódja. ● Új függvények(illetve tartozik hozzájuk egy kupac konstans is): – imageflip() – imagecrop() – imagecropauto() – imagesetinterpolation() – imageaffine() – imageaffinematrixget() – imageaffinematrixconcat() – imagescale()
  • 19. 27/19 curl ● Új függvény: curl_file_create ● Új osztály: CURLFile ● Új konstans: CURLOPT_SAFE_UPLOAD ● Fájlfeltöltés 5.5 előtt: curl_setopt($curl_handle, CURLOPT_POST, 1); $args['file'] = '@/path/to/file'; curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args); ● Fájlfeltöltés 5.5ben: curl_setopt($curl_handle, CURLOPT_POST, 1); $args['file'] = new CurlFile('filename.png', 'image/png'); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args); ● A régi működés kikapcsolható a CURLOPT_SAFE_UPLOAD
  • 20. 27/20 intl ● Uconverter osztály: – Karakterkódolások között lehet oda-vissza konvertálgatni szöveget. – mb_convert_encoding()-hez képest extraként megadható, hogy megadható, hogy mi történjen az alapból nem leképezhető karakterekkel. ● rengeteg további intl/ICU okosítás(75 új függvény), cserébe ICU követelmény felkúszott >= 4.0-ra.
  • 21. 27/21 date ● Új DateTimeInterface interface. ● Új DateTimeImmutable osztály – DateTime-mal szemben nem módosítja saját magát, csak visszatér a módosult példánnyal, ● Mind a DateTime, mind a DateTimeImmutable a DateTimeInterface megvalósítása.
  • 22. 27/22 sockets ● Sendmsg(), recvmsg(), socket_cmsg_space() – kiegészítő adatokat lehet vele küldeni, fogadni(lásd konstansok). ● IPV6_PKTINFO ● IPV6_RECVPKTINFO ● IPV6_HOPLIMIT ● IPV6_TCLASS ● IPV6_RECVTCLASS ● SCM_RIGHTS ● SCM_CREDENTIALS ● SO_PASSCRED
  • 23. 27/23 42 ● 'The answer to life, the universe and everything'[0] ● array(42 =>'The answer to life, the universe and everything')[42] ● Abszolút osztálynév feloldás a class konstans használatával: echo ClassName::class; // 'ANamespacedClassName' ● cli_get_process_title/cli_set_process_title: cli processzhez tartozó cím (ami ps kimenetben, ablakfejlécben, etc. látszik) lekérdezhető és beállítható lesz minden nagyobb platformon. ● set_error_handler/set_exception_handler NULL callbackkel hívva visszaállítja a gyári handlert és visszatér az utoljára beállítottal. ● boolval() ● Az empty() mostantól kifejezések vizsgálatára is használható. ● Systemtap támogatás, az 5.3-ban hozzáadott dtrace probe-ok mostantól systemtap-en keresztül is elérhetőek. ● Az új Apache 2.4 handler támogatott lett windowson. ● Max-Age attribútum minden php-ből kreált sütire.
  • 24. 27/24 Ami felmerült, de végül kimaradt ● Accessors – https://wiki.php.net/rfc/propertygetsetsyntax-v1.2 ● DateTime::__toString() – https://wiki.php.net/rfc/datetime_tostring ● Escaper – https://wiki.php.net/rfc/escaper ● Annotációk DocBlock alapokon – https://wiki.php.net/rfc/reflection_doccomment_annotations – https://wiki.php.net/rfc/annotations-in-docblock ● Opcionális paraméterek default értékének használata a hívásnál – https://wiki.php.net/rfc/skipparams ● Függvényhívás paraméterlista végén vessző elfogadása – https://wiki.php.net/rfc/trailing-comma-function-args ● „assuming $this from incompatible context” ellenjavalttá tétele – https://wiki.php.net/rfc/incompat_ctx ● (new Foo)->bar = 'baz' – http://www.mail-archive.com/internals@lists.php.net/msg64194.html ● „Pure-code” php fájlok – https://wiki.php.net/rfc/phpp ● array_part() – https://wiki.php.net/rfc/array_part
  • 25. 27/25 Ami kimaradt, de szerintem igény  lenne rá ● AST alapú parser – https://wiki.php.net/rfc/ast_based_parsing_compilation_process ● Natív, teljes körű Unicode támogatás ● Typehint skaláris típusokra is – A Fatal error-os formában nem valószínű hogy valaha is bekerül. ● Kivétel alapú hibakezelés – Nem tudja kiváltani a jelenlegi infrastruktúrát, plusz nem illeszkedik a multiparadigmás imázsba. – https://github.com/ircmaxell/ErrorExceptions ● Chainelhető user error/exception handlerek – Mint ahogy pl. most az spl autoloader működik. ● Skalár objektek – https://github.com/nikic/scalar_objects ● Thread kezelés – http://pecl.php.net/package/pthreads ● PDO2
  • 26. 27/26 Visszafelé nem(teljesen) kompatibilis  változások ● ext/mysql (ext/mysqli javasolt helyette) ● mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb() (mcrypt_generic/mdecrypt_generic használható helyette). ● Bugfix: unpack("a5", "str00") 5.5 előtt 3 hosszú stringet adott vissza, 5.5től a helyes 5 hosszú NUL paddolt stringet, a 'Z' kapcsolóval elérhető a régi hibás viselkedés továbbra is. ● A függvények, osztályok és konstans nevek belső case insensitive-ségének biztosítása mindig ASCII szabályok szerint történik ezentúl (pl. török locale-lel voltak korábban problémák: https://bugs.php.net/bug.php?id=18556). ● Windows XP és 2003 támogatása megszűnik. ● php_logo_guid(), php_egg_logo_guid(), php_real_logo_guid(), zend_logo_guid() függvények eltávolításra kerültek, helyettük data url-ek használata javasolt. ● --with-curlwrappers configure kapcsoló és az ehhez tartozó experimental kód eltávolításra került. ● '@/path/to/file' típusú curl fájlfeltöltés ellenjavalttá vált. ● IntlDateFormatter::setTimeZoneID() és datefmt_set_timezone_id() ellenjavalttá vált. A IntlDateFormatter::setTimeZone() vagy a datefmt_set_timezone() használható helyette.