Najnowsze wypowiedzi

Napisane przez użytkowników:

[Praca oferowana / wspó³praca] Programista C/C++
Dla naszego klienta du¿ej miêdzynarodowej firmy poszukujemy osób na stanowisko Programista/ Team Leader Lokalizacja Warszawa Wymagane: -roczne do¶wiadczenie C/C++ -znajomo¶æ jêzyka...
[Praca oferowana / wspó³praca] Programista RPG
Dla naszego klienta du¿ej instytucji finansowej poszukujemy osoby na stanowisko Programista Wymagane do¶wiadczenie w programowaniu RPG. Lokalizacja Poznañ Osoby zainteresowane proszê o...
[Praca oferowana / wspó³praca] Software Implementation Manager Java
Witam serdecznie Dla naszego klienta firmy konsultingowej poszukujemy osob na stanowisko Software Implementation Manager Lokalizacja: Warszawa Wymagania: - 2 lata do¶wiadczenia w...
[Praca oferowana / wspó³praca] Programista PL/SQL Oracle
Dla naszego klienta dostawcy systemow ERP, poszukujemy osob na stanowiska Software Developera. Lokalizacja: Poznan, Gdansk Wymagania doswiadczenie w programowaniu w PL/SQL, Java znajomosc...
[VBA i OOoB] [Excel] Zliczanie konkretnej warto¶ci z pliku textowego
Cze¶æ Wszystkim, mam taki problem; potrzebuje do excel'a za pomoc± makra zliczyæ ilo¶æ wierszy z pliku tekstowego dla których w pewnej kolumnie wystepuje jaka¶ warto¶æ. (plik textowy rozdzialony...

Nauka PHP

Kurs w celu przybliżenia języka jakim jest php.



Klasy/Obiekty

XII. Klasy/Obiekty

Wstęp

Te funkcje pozwalają uzyskać informacje o klasach i ich egzemplarzach, obiektach. Możesz uzyskać informację o nazwie klasy do jakiej należy obiekt, a także jej właściwości i metody. Używając tych funkcji możesz dowiedzieć się nie tylko do jakiej klasy należy obiekt, ale także ustalić jego przodków (np. jaką klasę rozszerza klasa tego obiektu).

Wymagania

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

Instalacja

By używać tych funkcji, nie trzeba niczego instalować. Są one częścią jądra PHP.

Konfiguracja uruchomieniowa

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 predefiniowane

To rozszerzenie nie posiada żadnych stałych.

Przykłady

W tym przykładzie najpierw zdefiniujemy bazową klasę i jej rozszerzenie. Klasa bazowa opisuje normalne warzywo, czy jest jadalne czy nie oraz jego kolor. Podklasa Szpinak dodaje metodę pozwalającą go zagotować i drugą, która pozwala dowiedzieć się, czy jest zagotowany.

Przykład 1. classes.inc

<?php

// klasa bazowa wraz z jej właściwościami i metodami
class Warzywo {

    var
$jadalne;
    var
$kolor;

    function
Warzywo($jadalne, $kolor="zielony") {
        
$this->jadalne = $jadalne;
        
$this->kolor = $kolor;
    }

    function
czy_jadalne() {
        return
$this->jadalne;
    }

    function
jaki_kolor() {
        return
$this->kolor;
    }

}
// koniec klasy Warzywo

// rozrzesza klasÄ™ bazowÄ…
class Szpinak extends Warzywo {

    var
$ugotowane = false;

    function
Szpinak() {
        
$this->Warzywo(true, "zielone");
    }

    function
ugotuj() {
        
$this->ugotowane = true;
    }

    function
czy_ugotowane() {
        return
$this->ugotowane;
    }

}
// koniec klasy Szpinak

?>

Teraz możemy stworzyć dwa egzemplarze tych klas i wydrukować informacje o nich, włączając w to informacje o przodkach. Zdefiniujemy także kilka użytecznych funkcji, głównie po to by uzyskać ładny wydruk zmiennych.

Przykład 2. test_script.php

<pre>
<?php

include "classes.inc";

// funkcje użytkowe

function drukuj_wlasciwosci($obj) {
    foreach (
get_object_vars($obj) as $wlasc => $wart) {
        echo
"\t$wlasc = $wart\n";
    }
}

function
drukuj_metody($obj) {
    
$tab = get_class_methods(get_class($obj));
    foreach (
$tab as $metoda) {
        echo
"\tfunkcja $metoda()\n";
    }
}

function
przodkowie_klasy($obj, $klasa) {
    global $
$obj;
    if (
is_subclass_of($GLOBALS[$obj], $klasa)) {
        echo
"Obiekt $obj należy do klasy ".get_class($$obj);
        echo
", podklasy $klasa\n";
    } else {
        echo
"Obiekt $obj nie należy do podklasy $klass\n";
    }
}

// tworzymy 2 egzemplarze obiektów

$warzywko = new Warzywo(true, "niebieski");
$lisciaste = new Szpinak();

// wydrukujemy informacjÄ™ o obiektach
echo "warzywko: KLASA ".get_class($warzywko)."\n";
echo
"lisciaste: KLASA ".get_class($lisciaste);
echo
", PRZODEK ".get_parent_class($lisciaste)."\n";

// pokażmy właściwości warzywka
echo "\nwarzywko: Właściwości\n";
drukuj_wlasciwosci($warzywko);

// i metody liściastego
echo "\nlisciaste: Metody\n";
drukuj_metody($lisciaste);

echo
"\nPrzodkowie:\n";
przodkowie_klasy("lisciaste", "Szpinak");
przodkowie_klasy("lisciaste", "Warzywo");
?>
</pre>

Wartą odnotowania rzeczą w powyższym przykładzie jest to, że obiekt $lisciaste jest egzemplarzem klasy Szpinak która to jest podklasą klasy Warzywo, i tak ostatnia część powyższego skryptu pokaże na wyjściu:

[...]
Przodkowie:
Obiekt lisciasty nie należy do podklasy Szpinak
Obiekt lisciasty należy do klasy Szpinak, podklasy Warzywo

Spis treści
call_user_method_array --  WywoÅ‚uje metodÄ™ użytkownika zadanÄ… z tablicÄ… parametrów [przestarzaÅ‚e]
call_user_method --  WywoÅ‚uje metodÄ™ użytkownika na zadanym obiekcie [przestarzaÅ‚e]
class_exists -- Sprawdza czy klasa zostaÅ‚a zdefiniowana
get_class_methods -- Zwraca tablicÄ™ nazw metod danej klasy
get_class_vars --  Zwraca tablicÄ™ domyÅ›lnych wÅ‚aÅ›ciwoÅ›ci klasy
get_class -- Zwraca nazwÄ™ klasy zadanego obiektu
get_declared_classes -- Zwraca tablicÄ™ z nazwami zdefiniowanych klas
get_declared_interfaces -- Returns an array of all declared interfaces
get_object_vars -- Zwraca tablicÄ™ asocjacyjnÄ… wÅ‚aÅ›ciwoÅ›ci obiektu
get_parent_class -- Pobiera nazwÄ™ klasy przodka dla obiektu lub klasy
interface_exists -- Checks if the interface has been defined
is_a --  Zwraca TRUE jeżeli obiekt jest tej klasy, lub ta klasa jest jednym z jego przodków
is_subclass_of --  Zwraca TRUE jeżeli klasa jest jednym z przodków obiektu
method_exists -- Sprawdza czy metoda klasy istnieje
property_exists --  Checks if the object or class has a property

Ciekawe informacje

Najciekawsze informacje znalezione w sieci

Obsługa wielowątkowości, jak to wykonać, przykład gdy wątki próbują robić coś równocześnie (jak temu zapobiec, lub jak to obsłużyć) np w przypadku obiektu klasy RECORDSET jeden cos tam jeszcze myka pobiera, się wcina i przed pobraniem następuje zamkniecie (close()) obiektu recordset.