BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 21 | UU: 286
Wyszukaj funkcję PHP:  

XCIX. Przeciążanie właściwości obiektów i wołania ich metod

Wstęp

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.

Wymagania

Do zbudowania tego rozszerzenia nie są wymagane żadne zewnętrzne biblioteki.

Instalacja

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.

Konfiguracja czasu wykonywania

To rozszerzenie nie definiuje posiada żadnych dyrektyw konfiguracyjnych w pliku php.ini.

Typy zasobów

To rozszerzenie nie posiada żadnych rodzajów zasobów.

Stałe predefinopwane

To rozszerzenie nie posiada żadnych stałych.

Przykłady

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

?>

Spis treści
overload -- Umożliwienie przeciążania właściwości i wołania metod dla klasy
| | | |
Copyright © 2006-2013 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker