A PHP 5.4 újdonságai
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

A PHP 5.4 újdonságai

on

  • 4,021 views

 

Statistics

Views

Total Views
4,021
Views on SlideShare
4,015
Embed Views
6

Actions

Likes
5
Downloads
16
Comments
0

3 Embeds 6

http://a0.twimg.com 4
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

A PHP 5.4 újdonságai Presentation Transcript

  • 1. A PHP 5.4 újdonságai
  • 2. Bemutatkozás
    • 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.
  • 9. Bevezetés
  • 10. Történelmi visszatekintés
    • 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
  • 17. Roadmap
    • Az nincs
  • 18. WTF?
    • Van az 5.4 kiadás 2 RM-je (Release Manager):
      • Stas Malyshev
      • 19. David Soria Parra
    • Van egy Release Process RFC:
      • https://wiki.php.net/rfc/releaseprocess
    • Illetve egy Voting RFC:
      • https://wiki.php.net/rfc/voting
    • Elméletileg a mindkét RFC el lett fogadva...
  • 20. RM
    • Koordinálja egy adott kiadás körüli teendőket:
      • 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.
    • Az RM-ek jóváhagyása nélkül nem kerülhet az adott ágban új verzió kiadásra.
  • 24. Hogyan alakul ki egy új verzió?
    • 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.
  • 29. BC
    • Internal
      • API
      • 30. ABI
    • Userland
      • API
    • Extensions
  • 31. BC
    • Major(4.0, 5.0, etc)
      • Bármilyen BC break engedélyezett.
    • Minor(5.1, 5.2, 5.3)
      • 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.
    • Micro(5.3.6, 5.3.7)
      • Semmilyen BC break nem engedélyezett.
      • 34. Új, önálló feature is csak indokolt esetben.
  • 35. Miért nincs ez mindig így?
    • 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.).
  • 39. Hogyan lehet ezen segíteni?
    • 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...
  • 42. Újdonságok
  • 43. Closure rebind
    • 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:
      • https://wiki.php.net/rfc/closures/removal-of-this
    • 5.4-ben immár erre is lehetőségünk lesz.
  • 44. Closure rebind
    • Mostantól a Closure-ökhöz tartozhat egy scope:
      • 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.)
    • Mostantól a Closure-ökhöz tartozhat egy hozzárendelt(bound) objektum.
      • Ez lesz a $this az adott Closure számára.
    • Mostantól a Closure-ök definiálhatóak static-ként.
      • Ebben az esetben nem érhető el a $this.
  • 45. Closure rebind
    • Scope:
      • 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.
  • 50. Closure rebind
    • Bound:
      • 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.
  • 53. Closure rebind
    • Static:
      • 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.
  • 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
    • Van már dokumentáció o/
      • http://php.net/traits
    • 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.
  • 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
    • 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.
  • 65. Traits
    • 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.
  • 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
    • 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.
  • 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
    • 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.
  • 80. Beépített webszerver
  • 81. Array dereferencing
    • Lehetővé teszi, hogy egy függvény által visszaadott tömbből segédváltozó nélkül hivatkozni lehessen az egyik elemre.
      • some_func()[0];
    • 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. :/
      • https://wiki.php.net/rfc/fcallfcall
      • 82. https://wiki.php.net/rfc/instance-method-call
  • 83. Rövidebb tömb deklaráció
    • $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:
      • https://wiki.php.net/rfc/objectarrayliterals
  • 85. callable
    • Bevezetésre került a callable typehint, ami ugyanazt tekinti meghívhatónak, mint amit az is_callable().
      • function call(callable $callback){$callback();}
    • Ehhez kapcsolódóan, mostantól lehetőség van egy callable formátumú tömböt egyszerűen meghívni:
      • $foo = array('Closure', 'bind');$foo();
  • 86. T_PAAMAYIM_NEKUDOTAYIM
    • Mostantól hiba esetén nem csak a token konstansát, de a token nevét is megkapjuk a hibaüzenetben:
      • Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
      • 87. vs
      • 88. Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
  • 89. session.upload.progress
    • 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!
      • 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.
  • 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
    • 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.
  • 97. Régiségek
  • 98. Végképp eltörölve
    • 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
  • 111. És még sok egyéb
  • 112. Néhány egyéb
    • 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
  • 120. További olvasnivaló
    • 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/
  • 129. Vége
    • 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!