Celem tego rozszerzenia jest umożliwienie przeciążania dostępu do
właściwości obiektów oraz wołania metod. Rozszerzenie to definiuje tylko
jedną funkcję, overload(), która przyjmuje jako
parametr nazwę klasy dla której przeciążanie powinno być udostępnione.
Klasa ta powinna mieć zdefiniowane odpowiednie metody, jeżeli chce
korzystać z tej dodatkowej funkcjonalności: __get(),
__set() oraz __call() odpowwiednio
dla pobierania/ustawiania wartości właściwości, lub wołania metod. Tym
sposobem przeciążanie może być dostępne wybiórczo. Wewnątrz tych funkcji
bsługujących przeciążanie, ono samo jest niedostępne by mieć możliwość
normalnego dostępu do właściwości obiektu.
| Ostrzeżenie |
Ten moduł jest w stadium
EKSPERYMENTALNYM. Oznacza to, że zachowanie tych funkcji,
ich nazwy, w zasadzie wszystko udokumentowane tutaj może zostać zmienione w
przyszłych wersjach PHP bez wcześniejszego uprzedzenia. Używaj tego modułu na
własne ryzyko. |
| Ostrzeżenie |
To rozszerzenie nie jest częścią PHP 5. PHP 5 obsługuje __get(), __set() i
__call() natywnie. Zobacz stronę Przeciążanie w PHP 5
aby uzyskać więcej informacji.
|
Do zbudowania tego rozszerzenia nie są wymagane
żadne zewnętrzne biblioteki.
Chcąc używać tych funkcji musisz skompilować PHP z opcją --enable-overload.
Od PHP 4.3.0 to rozszerzenie jest włączone domyślnie. Możesz wyłączyć
wsparcie dla przeciążania opcją --disable--overload.
PHP w wersji dla systemów
Windows posiada wbudowaną obsługę dla tego rozszerzenia. Nie trzeba ładować
żadnych dodatkowych rozszerzeń aby korzystać z tych funkcji.
Notatka:
Wsparcie dla przeciążania jest wbudowane od wersji PHP 4.3.0.
To rozszerzenie nie definiuje posiada żadnych
dyrektyw konfiguracyjnych w pliku php.ini.
To rozszerzenie nie posiada żadnych rodzajów zasobów.
To rozszerzenie nie posiada żadnych stałych.
Kilka prostych przykładów demonstrujących użycie funkcji
overload():
Przykład 1. Przeciążanie klasy PHP
<?php
class OO { var $a = 111; var $elem = array('b' => 9, 'c' => 42);
// Funkcja obsługująca pobierania właściwości function __get($wl_nazwa, &$wl_wart) { if (isset($this->elem[$wl_nazwa])) { $wl_wart = $this->elem[$wl_nazwa]; return true; } else { return false; } }
// Funkcja obsługująca ustawianie właściwości function __set($wl_nazwa, $wl_wart) { $this->elem[$wl_nazwa] = $wl_wart; return true; } }
// Umożliwiamy przeciążanie obiektów klasy OO overload('OO');
$o = new OO; echo "\$o->a: $o->a\n"; // print: $o->a: 111 echo "\$o->b: $o->b\n"; // print: $o->b: 9 echo "\$o->c: $o->c\n"; // print: $o->c: 42 echo "\$o->d: $o->d\n"; // print: $o->d:
// dodajemy nową pozycję do tablicy $elem w OO $o->x = 56;
// tworzymy egzemplarz klasy stdclass (wbudowanej w PHP 4) // $val nie jest przeciążane! $val = new stdclass; $val->prop = 555;
// Ustawiamy "a" jako tablicę z obiektem $val w środku // Lecz __set() włoży to do tablicy $elem $o->a = array($val); var_dump($o->a[0]->prop);
?>
|
|