SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
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.
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.
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ó / </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 " $c " ; } } 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>
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
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
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>
93.
session.upload.progress $_SESSION [ "upload_progress_123" ] = array ( "start_time" => 1234567890 , // The request time "content_length" => 57343257 , // POST content length "bytes_processed" => 453489 , // Amount of bytes received and processed "done" => false, // true when the POST handler has finished, successfully or not "files" => array ( 0 => array ( "field_name" => "file1" , // Name of the <input/> field // The following 3 elements equals those in $_FILES "name" => "foo.avi" , "tmp_name" => "/tmp/phpxxxxxx" , "error" => 0 , "done" => true, // True when the POST handler has finished handling this file "start_time" => 1234567890 , // When this file has started to be processed "bytes_processed" => 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>
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.