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->