Co je nového v PHP 5 (díl 3/5)

MyEgo.cz

home foto blogy mywindows.cz kontakt

Co je nového v PHP 5 (díl 3/5)

PHP 18.06.04

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.


Komentáře

  1. 1 dgx 21.06.04, 12:06:56
    FB

    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ší?

  2. 2 Radek Hulán 21.06.04, 01:06:30
    FB

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