Co je nového v PHP 5 (díl 3/5)
Se slušnou podporou objektů v PHP 5 souvisí i podpora pro lepší typovou kontrolu tříd. Konečně! Nicméně, není to podpora ve fázi kompilace, ale pochopitelně ve fázi runtime, tedy běhu programu. Tento příklad nám ilustruje "class hints":
interface _prvni { function a(_prvni $_prvni); } interface _druhy { function b(_druhy $_druhy); } class _treti implements _prvni, _druhy { function a(_prvni $_prvni) { // ... } function b(_druhy $_druhy) { // ... } } $a = new _treti; $b = new _treti; $a->a($b); $a->b($b);
Velká změna přichází při klonování objektů, pro zavolání funkce clone je totiž volán nový implicitní konstruktor __clone(). Je to velice užitečné, pokud potřebujete dva objekty, s tím, že druhý má změněné jen některé atributy. Příklad?
class _original { static $id = 0; function MyCloneable() { $this->id = self::$id++; } function __clone() { $this->address = "Praha"; $this->id = self::$id++; } } $obj = new _original(); $obj->name = "Ahoj"; $obj->address = "New York"; print $obj->id . "\n"; $_klon = clone $obj; print $_klon->id . "\n"; print $_klon->name . "\n"; print $_klon->address . "\n";
Velikou novinku je možnost zpracování výjímek v PHP 5. Konečně! Jediné, pro co není podpora, je finally, podporovány jsou ale struktury try, catch a throw. Příklad?
class MyException { function __construct($exception) { $this->exception = $exception; } function Display() { print "MyException: $this->exception\n"; } } class MyExceptionHandle extends MyException { function __construct($exception) { $this->exception = $exception; } function Display() { print "MyException: $this->exception\n"; } } try { throw new MyExceptionHandle('Hello'); } catch (MyException $exception) { $exception->Display(); } catch (Exception $exception) { echo $exception; }
Podporovány jsou rovněž statické metody třídy (statické metody mohou být volány i bez vytvoření instance třídy). Toto se bude moc hodit! :) Příklad?
class _trida { public static function _staticka() { // ... } } _trida::_staticka();
Ve čtvrtém díle se podívám na další objektová rozšíření PHP 5.
skvělý seriál Radku!
jen dotaz ke statickým metodám: volání bez vytvoření instance už používám ve verzi 4 (samozřejmě bez použití klíčového slova static). V čem se tedy static ve verzi 5 liší?
[1] třídy s explicitně (a vhodně) deklarovanými metodami public, static, final, private, atd. by měly mít podstatně vyšší výkon / skript by měl být rychlejší. Jen poznámka: ve static třídě není možné používat pseudo-keyword $this->