Your SlideShare is downloading. ×
0
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
A PHP 5.4 újdonságai
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

A PHP 5.4 újdonságai

3,555

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,555
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. A PHP 5.4 újdonságai
  • 2. Bemutatkozás <ul><li>Kovács Ferenc
  • 3. Elsősorban webfejlesztő
  • 4. +Üzemeltetés, IT biztonság, Minőségbiztosítás
  • 5. Társszerkesztő a Weblaboron
  • 6. Közreműködő a PHP projectben
  • 7. __NEM__ „evangelista” :)
  • 8. A Tyrael nick esetleg ismerősebb lehet. </li></ul>
  • 9. Bevezetés
  • 10. Történelmi visszatekintés <ul><li>4.0 – 2000.05.22 (Zend Engine)
  • 11. 5.0 – 2004.07.13 (Zend Engine 2)
  • 12. 5.1 – 2005.11.24
  • 13. 5.2 – 2006.11.02
  • 14. 6.0 – ???
  • 15. 5.3 – 2009.06.30
  • 16. 5.4 – ~2011.Q4/2012.Q1 </li></ul>
  • 17. Roadmap <ul><li>Az nincs </li></ul>
  • 18. WTF? <ul><li>Van az 5.4 kiadás 2 RM-je (Release Manager): </li><ul><li>Stas Malyshev
  • 19. David Soria Parra </li></ul><li>Van egy Release Process RFC: </li><ul><li>https://wiki.php.net/rfc/releaseprocess </li></ul><li>Illetve egy Voting RFC: </li><ul><li>https://wiki.php.net/rfc/voting </li></ul><li>Elméletileg a mindkét RFC el lett fogadva... </li></ul>
  • 20. RM <ul><li>Koordinálja egy adott kiadás körüli teendőket: </li><ul><li>Kezdeményezi, illetve moderálja az fejlesztések körüli megbeszéléseket, illetve a szavazást.
  • 21. Kijelöli a kiadási folyamat egyes lépéseinek céljait és határidejét.
  • 22. Tageli és csomagolja a kiadásra jelölt változatot.
  • 23. Gondoskodik róla, hogy a releaseprocess RFC-ben foglaltak betartásra kerülnek. </li></ul><li>Az RM-ek jóváhagyása nélkül nem kerülhet az adott ágban új verzió kiadásra. </li></ul>
  • 24. Hogyan alakul ki egy új verzió? <ul><li>Ami az előző verzióba valamiért nem fért bele.
  • 25. Minden ami a trunkból átemelhető.
  • 26. Hibajavítások (minden érintett branchre).
  • 27. Ad hoc fejlesztések, elméletileg minden nem triviális fejlesztéshez kellene hogy legyen RFC illetve szavazás.
  • 28. A BC(visszafele kompatibilitás) illetve a nem megfelelő stabilitás a leggyakoribb oka annak ha valami végül mégis kimarad. </li></ul>
  • 29. BC <ul><li>Internal </li><ul><li>API
  • 30. ABI </li></ul><li>Userland </li><ul><li>API </li></ul><li>Extensions </li></ul>
  • 31. BC <ul><li>Major(4.0, 5.0, etc) </li><ul><li>Bármilyen BC break engedélyezett. </li></ul><li>Minor(5.1, 5.2, 5.3) </li><ul><li>Internal API/ABI megváltozhat.
  • 32. Userland API nem, vagy nagyon indokolt esetben.
  • 33. Kiegészítők átköltöztethetőek core-ból pecl-be. </li></ul><li>Micro(5.3.6, 5.3.7) </li><ul><li>Semmilyen BC break nem engedélyezett.
  • 34. Új, önálló feature is csak indokolt esetben. </li></ul></ul>
  • 35. Miért nincs ez mindig így? <ul><li>A releaseprocess RFC még nincs 1 éves.
  • 36. Nagyon sok BC break nem szándékosan történik és néha túl későn derül ki: úgy marad.
  • 37. Néha ugyan nyilvánvaló a változás, de mindenki úgy gondolja, hogy senkit nem fog érinteni.
  • 38. Néha egyszerűen nincs más megoldás, mert fontos egy adott javítás (biztonsági rés, etc.). </li></ul>
  • 39. Hogyan lehet ezen segíteni? <ul><li>Növelni kell a teszt esetek coverage-ét, illetve komolyan kell venni, ha egy teszteset elkezd elhasalni. (Ez utóbbi el volt hanyagolva.)
  • 40. Be kell vonni több résztvevőt, alkalmazást az RC verziók tesztelésébe, hogy még a stable előtt legyen lehetőség kiszúrni és javítani a hibákat.
  • 41. Be kell tartani az RFC-t... </li></ul>
  • 42. Újdonságok
  • 43. Closure rebind <ul><li>5.3-ban megállapodás hiányában nem lett megvalósítva az objektumok támogatása a névtelen függvényekhez: </li><ul><li>https://wiki.php.net/rfc/closures/removal-of-this </li></ul><li>5.4-ben immár erre is lehetőségünk lesz. </li></ul>
  • 44. Closure rebind <ul><li>Mostantól a Closure-ökhöz tartozhat egy scope: </li><ul><li>A Closure úgy éri el a bound objektumot mintha a Closure a scope-ban megadott osztályban lenne egy metódus. (visibility miatt fontos pl.) </li></ul><li>Mostantól a Closure-ökhöz tartozhat egy hozzárendelt(bound) objektum. </li><ul><li>Ez lesz a $this az adott Closure számára. </li></ul><li>Mostantól a Closure-ök definiálhatóak static-ként. </li><ul><li>Ebben az esetben nem érhető el a $this. </li></ul></ul>
  • 45. Closure rebind <ul><li>Scope: </li><ul><li>Ha egy osztályon belül lett a Closure definiálva, akkor az adott osztály lesz a scope automatikusan.
  • 46. Ha rebindoljuk a Closure::bind() vagy $closure->bindTo() függvényhivásokkal, akkor az ott megadott objektum scopeját kapja.
  • 47. Closure::bind() 3. paraméterén keresztül megadható a boundtól eltérő scope.
  • 48. Statikusan definiált Closure is rendelkezhet Scope-pal.
  • 49. Fentiekből következik, hogy nem mindig van Scope. </li></ul></ul>
  • 50. Closure rebind <ul><li>Bound: </li><ul><li>Ha egy osztályon belül lett a Closure definiálva, akkor az adott példány lesz a bound objektum automatikusan.
  • 51. A bound objektum változtatható a Closure::bind() vagy $closure->bindTo() metódusán keresztül.
  • 52. Statikus Closure nem rendelkezhet Bound objektummal. </li></ul></ul>
  • 53. Closure rebind <ul><li>Static: </li><ul><li>Egy Closure akkor statikus, ha a static kulcsszóval vagy ha egy statikus metóduson belül definiáltuk.
  • 54. Statikusan definiált Closure is rendelkezhet Scope-pal.
  • 55. Statikus Closure nem rendelkezhet Bound objektummal. </li></ul></ul>
  • 56. Closure rebind <?php class MyClass { private $foo = 100 ; public function getClosure () { $baz = 1 ; return function ( $bar ) use ( $baz ) { return $this ->foo+ $bar + $baz ; }; } } $myClass = new MyClass; $closure = $myClass ->getClosure(); echo $closure ( 10 ); // 111
  • 57. Traits <ul><li>Van már dokumentáció o/ </li><ul><li>http://php.net/traits </li></ul><li>Viselkedések gyüjteménye, többszörös öröklést nem támogató nyelvekben használható egyik konstrukció a horizontális kódújrahasznosításra
  • 58. Egyszerűbben fogalmazva makró, a nyelv által biztosított copy&paste.
  • 59. Elsőre bonyolultan hangozhat, lássunk egy példát. </li></ul>
  • 60. Traits <?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ }
  • 61. Traits <ul><li>A trait kulcsszóval definiáljuk, önmagában nem példányosítható.
  • 62. Osztályon belül a use kulcsszó használatával mondhatjuk meg az engine-nek, hogy mely traitseket szeretnénk használni.
  • 63. A traitben létező metódus felüldefiniálja a parentből definiált metódust, de az adott osztályban definiált metódust nem.
  • 64. Egy osztály több traitet is használhat. </li></ul>
  • 65. Traits <ul><li>Természetesen több trait is használható egyszerre, a use után vesszővel felsorolva.
  • 66. Ha szeretnénk használni több traitet egyszerre, amelyek közül kettő ugyanazt a metódust definiálja, akkor az insteadof kulcsszóval feloldhatjuk a konfliktusokat.
  • 67. Ha egy metódus láthatóságát szeretnénk megváltoztatni, vagy egy másik néven is elérni, azt az as kulcsszóval tehetjük meg. </li></ul>
  • 68. Traits <?php trait A { public function smallTalk() { echo 'a' ; } public function bigTalk() { echo 'A' ; } } trait B { public function smallTalk() { echo 'b' ; } public function bigTalk() { echo 'B' ; } } class Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; } }
  • 69. Traits <?php trait HelloWorld { public function sayHello() { echo 'Hello World!' ; } } // Change visibility of sayHello class MyClass1 { use HelloWorld { sayHello as protected ; } } // Alias method with changed visibility // sayHello visibility not changed class MyClass2 { use HelloWorld { sayHello as private myPrivateHello; } }
  • 70. Traits <ul><li>Egy trait-en belül is használhatjuk a use kulcsszót, ami azt jelenti, hogy egymásra épülő viselkedéseket definiálhatunk.
  • 71. Lehetőségünk van absztrakt metódusok definiálására is, ezáltal jelezve a traitet felhasználó osztálynak, ha valamit neki szükséges definiálnia.
  • 72. Egy trait hivatkozhat statikus tagváltozókra, de nem definiálhatja őket, viszont statikus metódust definiálhat. </li></ul>
  • 73. Traits <?php trait Hello { public function sayHelloWorld() { echo 'Hello' . $this ->getWorld(); } abstract public function getWorld(); } class MyHelloWorld { private $world ; use Hello; public function getWorld() { return $this ->world; } public function setWorld( $val ) { $this ->world = $val ; } }
  • 74. Traits <?php trait Counter { public function inc() { static $c = 0 ; $c = $c + 1 ; echo &quot; $c n &quot; ; } } class C1 { use Counter; } class C2 { use Counter; } $o = new C1(); $o ->inc(); // echo 1 $p = new C2(); $p ->inc(); // echo 1
  • 75. Traits <?php trait StaticExample { public static function doSomething() { return 'Doing something' ; } } class Example { use StaticExample; } Example::doSomething();
  • 76. Beépített webszerver <ul><li>A php bináris mostantól használható egy minimális tudású webszerverként.
  • 77. -S kapcsolóval megadható hogy milyen ip_cím:port -on figyeljen a szerver
  • 78. -t kapcsolóval megadható, hogy mi legyen a document root.
  • 79. A cli_server.color php ini beállítást 1-re állítva a szerver indítása után szinesben látjuk az egyes lekéréseket jelző logokat, ezáltal könnyebben követhetőek a sikeres/sikertelen lekérések. </li></ul>
  • 80. Beépített webszerver
  • 81. Array dereferencing <ul><li>Lehetővé teszi, hogy egy függvény által visszaadott tömbből segédváltozó nélkül hivatkozni lehessen az egyik elemre. </li><ul><li>some_func()[0]; </li></ul><li>Sajnos a method chaining illetve a példányosításból egyből metódus hivás még nem került be ebbe a verzióba. :/ </li><ul><li>https://wiki.php.net/rfc/fcallfcall
  • 82. https://wiki.php.net/rfc/instance-method-call </li></ul></ul>
  • 83. Rövidebb tömb deklaráció <ul><li>$foo = [1,2,3,3=>4];
  • 84. Felmerült a rövid object deklaráció, valamint a natív json szintakszis is, de egyelőre nem került elfogadásra: </li><ul><li>https://wiki.php.net/rfc/objectarrayliterals </li></ul></ul>
  • 85. callable <ul><li>Bevezetésre került a callable typehint, ami ugyanazt tekinti meghívhatónak, mint amit az is_callable(). </li><ul><li>function call(callable $callback){$callback();} </li></ul><li>Ehhez kapcsolódóan, mostantól lehetőség van egy callable formátumú tömböt egyszerűen meghívni: </li><ul><li>$foo = array('Closure', 'bind');$foo(); </li></ul></ul>
  • 86. T_PAAMAYIM_NEKUDOTAYIM <ul><li>Mostantól hiba esetén nem csak a token konstansát, de a token nevét is megkapjuk a hibaüzenetben: </li><ul><li>Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
  • 87. vs
  • 88. Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) </li></ul></ul>
  • 89. session.upload.progress <ul><li>Az uploadprogress es az apc extensionök után végre eljutottunk oda, hogy core modulok használatával is követhető 1 fájlfeltöltés státusza! </li><ul><li>http://php.net/manual/en/session.upload-progress.php
  • 90. $_SESSIONön keresztül nyomon követhető a feltöltések státusza.
  • 91. További hasznos feature, hogy egy session változó beállításával akár meg is szakítható a feltöltés. </li></ul></ul>
  • 92. session.upload.progress < form action= &quot;upload.php&quot; method= &quot;POST&quot; enctype= &quot;multipart/form-data&quot; > < input type= &quot;hidden&quot; name= &quot; <?php echo ini_get ( &quot;session.upload_progress.name&quot; ); ?> &quot; value= &quot;123&quot; /> < input type= &quot;file&quot; name= &quot;file1&quot; /> < input type= &quot;file&quot; name= &quot;file2&quot; /> < input type= &quot;submit&quot; /> </ form >
  • 93. session.upload.progress $_SESSION [ &quot;upload_progress_123&quot; ] = array ( &quot;start_time&quot; => 1234567890 , // The request time &quot;content_length&quot; => 57343257 , // POST content length &quot;bytes_processed&quot; => 453489 , // Amount of bytes received and processed &quot;done&quot; => false, // true when the POST handler has finished, successfully or not &quot;files&quot; => array ( 0 => array ( &quot;field_name&quot; => &quot;file1&quot; , // Name of the <input/> field // The following 3 elements equals those in $_FILES &quot;name&quot; => &quot;foo.avi&quot; , &quot;tmp_name&quot; => &quot;/tmp/phpxxxxxx&quot; , &quot;error&quot; => 0 , &quot;done&quot; => true, // True when the POST handler has finished handling this file &quot;start_time&quot; => 1234567890 , // When this file has started to be processed &quot;bytes_processed&quot; => 57343250 , // Amount of bytes received and processed for this file ), );
  • 94. mysql <ul><li>Mostantól a mysqlnd lesz az alapértelmezett mysql library, de továbbra is van lehetőség a libmysql-t használni.
  • 95. libmysqlből már csak 4.1es illetve magasabb verzió támogatott, elképzelhető hogy a végleges verzióban ez még feljebb kúszik.
  • 96. Felmerült, hogy a mysql extensiont dokumentáció szinten ellenjavalttá kellene tenni, a mysqli kiegészítés nagyon egyszerű migrációt tesz lehetővé, és folyamatosan fejlesztés alatt áll, szemben a mysql extensionnel. </li></ul>
  • 97. Régiségek
  • 98. Végképp eltörölve <ul><li>break/continue $var
  • 99. magic_quotes_gpc (ha csak ellenőrizted, hogy be van-e kapcsolva, az továbbra is működik)
  • 100. Safe mode
  • 101. register_globals
  • 102. register_long_arrays
  • 103. import_request_variables()
  • 104. allow_call_time_pass_reference.
  • 105. define_syslog_variables
  • 106. highlight.bg
  • 107. session.bug_compat_42
  • 108. session_is_registered()/session_register()/session_unregister()
  • 109. y2k_compliance
  • 110. Sqlite száműzve Szibériába(pecl), ajánlott az SQLite3 kiegészítőre átállni </li></ul>
  • 111. És még sok egyéb
  • 112. Néhány egyéb <ul><li>E_STRICT mostantól az E_ALL része
  • 113. <?= mindig elérhető a short_open_tag beállítástól függetlenül
  • 114. A oktális, decimális, hexadecimális mellett mostantól bináris formátumban is megadhatóak a számok. Pl: 0b001010
  • 115. enable_post_data_reading segítségével letiltható, a $_POST feltöltése, a nyers post data a php://input-on keresztül elérhető, multipart feltöltésnél hatékonyabb memóriakezelés érhető el.
  • 116. DTrace támogatás
  • 117. Új output lay(API szinten nincs változás)
  • 118. @ teljesítményoptimalizáció
  • 119. Egy csomó más optimalizáció mind a cpu mind memória szempontból, 15-30-50%os javulások nem szintetikus teszteken </li></ul>
  • 120. További olvasnivaló <ul><li>http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup
  • 121. http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/UPGRADING?view=markup
  • 122. https://wiki.php.net/rfc
  • 123. https://wiki.php.net/todo/php54
  • 124. http://news.php.net/php.internals
  • 125. http://svn.php.net/repository/php/php-src/branches/PHP_5_4/
  • 126. https://bugs.php.net/search.php?cmd=display&phpver=5.4.0
  • 127. http://gcov.php.net/viewer.php?version=PHP_5_4
  • 128. http://qa.php.net/reports/ </li></ul>
  • 129. Vége <ul><li>Köszönöm a figyelmet!
  • 130. Jöhetnek a kérdések.
  • 131. @Tyr43l
  • 132. http://tyrael.hu/
  • 133. http://www.slideshare.net/Tyrael/
  • 134. Bocsi hogy nem volt vicces fotó. :P
  • 135. Viszlát jövőre! </li></ul>

×