pozycjonowanie Dodawarka do katalogów katalogowanie
Pierwsza wersja PHP, rozpowszechniana pod nazwą PHP/FI Personal Home Page Forms Interpreter, została stworzona przez Rasmusa Lerdorfa w roku 1994 jako zestaw skryptów Perla służący do monitorowania internautów odwiedzających jego witrynę. Gdy ruch stał się zbyt duży, przepisał je w języku C, dodając przy tym nowe opcje. Niedługo później ludzie zaczęli prosić go o możliwość użycia tych narzędzi na swoich stronach, zatem 8 czerwca 1995 roku autor udostępnił publicznie kod źródłowy PHP Tools 1.0.


artykuły ekologiczne dla dzieci
Bezpieczne zabawki dla najmłodszych
Ubranka z naturalnych materiałów
www.ekodzieci.pl
wholesale leather handbag
Bags include magnetic press stud closure
The Visconti messenger bag is perfect
www.viscontibags.co.uk
nieruchomości śląsk
Ogromna ilość mieszkań na sprzedaż
Domki jednorodzinne w dobrej lokalizacji
www.nieruchomosci-spektrum.pl
teflon
Tworzywa sztuczne odporne na ścieranie
Elementy konstrukcyjne z tworzyw
www.syltech.pl


Generator bannerów
Zrób sobie banner szybko i za darmo
Prosty sposób na tworzenie bannerów
www.reklama-internetowa.com/banner/
GPS
Navigation GSP, system mobile and phone
Soft from gps, soft phone gps
www.pl-gps.com


Z powodu zmian licencji autorzy musieli usunąć z kodu własną bibliotekę do komunikacji z bazą MySQL. W związku z tym rozszerzenie MySQL nie jest już wkompilowywane domyślnie – należy je ręcznie doinstalować, korzystając z dostarczonej przez MySQL biblioteki libmysqlclient. Zmiana ta dotyczy również PHP 4. W zamian udostępniono nowy, domyślnie wkompilowany silnik baz danych – SQLite – którego cechą jest to, iż nie wymaga żadnych dodatkowych programów. Biblioteka kliencka jest jednocześnie jego serwerem.

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

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