Klasa
Z PHPEdia.pl
Spis treści |
Definicja
Klasa jest to zbiór zmiennych (tzw. właściwości) wraz z funkcjami (tzw. metodami), które na nich operują.
Składnia
Definicja klasy rozpoczyna się od słowa kluczowego class, po którym następuje jej nazwa.
<?php class Przyklad { // ciało klasy var $wlasciwosc; function metoda() { // ciało metody } } ?>
Aby odwołać sie do danej klasy, musimy zastosować słowo kluczowe new, które przypisze nam obiekt do zdeklarowanej zmiennej
<?php $obiekt = new Przyklad; // odwołanie do właściwości $obiekt -> wlasciwosc; // odwołanie do metody $obiekt -> metoda(); ?>
PHP 4
Właściwości
W PHP 4 właściwości są definiowane za pomocą słowa kluczowego var, po którym następuje nazwa właściwości, poprzedzona znakiem $ (czyli tak, jak dla zmiennych).
<?php class Przyklad { var $wlasciwosc; var $innaWlasciwosc; } ?>
Słowo kluczowe var nie jest wymagane, zatem wszystkie właściwości są dostępne publicznie - tzn. mogą być odczytywane i zmieniane zarówno z metod danej klasy, jak i z zewnątrz.
Metody
W PHP 4 metody są definiowane podobnie, jak zwykłe funkcje - za pomocą słowa kluczowego function, po którym następuje nazwa metody.
<?php class Przyklad { // definicja właściwości function metoda() { // ciało metody } function innaMetoda() { // ciało innej metody } } ?>
Wszystkie metody są dostępne publiczne - tzn. mogą być wywoływane zarówno z innych metod tej samej klasy, jak i z zewnątrz.
PHP 5
Właściwości
W PHP 5 właściwości mogą być jednego z trzech typów - publiczne (słowo kluczowe public), chronione protected oraz prywatne (private). Przy definiowaniu, nazwa właściwości (ze znakiem $) poprzedzona jest słowem kluczowym, które odpowiada odpowiedniemu typowi właściwości.
<?php class Przyklad { public $publicznaWlasciwosc; // dostępna wewnątrz, jak i na zewnątrz protected $chronionaWlasciwosc; // dostępna wewnątrz klasy, jak i dla klas dziedziczących po niej private $prywatnaWlasciwosc; // dostępna tylko z metod tej klasy } ?>
Możliwe jest niezdefiniowanie rodzaju właściwości lub pozostawienie słówka var (tak jak to było w poprzedniej wersji PHP), wtedy te właściwości będą miały automatycznie charakter publiczny.
W PHP 5 właściwości mogą być mieć wartość przypisaną już w definicji - wtedy są automatycznie inicjowane przy tworzeniu nowego obiektu klasy, jak i przy statycznym odwoływaniu się do nich.
<?php // definicja klasy class Przyklad { public $wlasciwosc = 12; public $innaWlasciwosc = 'przykład'; } $obiekt = new Przyklad; // przyklad odwolywania print $obiekt -> wlasciwosc; print Przyklad::wlasciwosc; print $obiekt -> innaWlasciwosc; print Przyklad::innaWlasciwosc; ?>
Wynik:
12 12 przykład przykład
Z reguły większość właściwości powinna być prywatna, a dostęp do nich - jedynie przez odpowiednie metody, tzw. akcesory. Umożliwia to prostą zmianą budowy wewnętrznej klasy, która jest częścią jakiejś większej aplikacji, bez wpływu na resztą tej aplikacji.
<?php class Przyklad { public $publicznaWlasciwosc = 'publiczna'; // dostępna wewnątrz, jak i na zewnątrz protected $chronionaWlasciwosc = 'chroniona'; // dostępna wewnątrz klasy, jak i dla klas dziedziczących po niej private $prywatnaWlasciwosc = 'prywatna'; // dostępna tylko z metod tej klasy public function pobierzPublicznaWlasciwosc() { return $this -> publicznaWlasciwosc; } public function pobierzChronionaWlasciwosc() { return $this -> chronionaWlasciwosc; } public function pobierzPrywatnaWlasciwosc() { return $this -> prywatnaWlasciwosc; } } $przyklad = new Przyklad; // odwołanie poprzez właściwości print $przyklad -> publicznaWlasciwosc; // wynik: "publiczna" print $przyklad -> chronionaWlasciwosc; // błąd print $przyklad -> prywatnaWlasciwosc; // błąd // odwołanie poprzez metody print $przyklad -> pobierzPublicznaWlasciwosc(); // wynik: "publiczna" print $przyklad -> pobierzChronionaWlasciwosc(); // wynik: "chroniona" print $przyklad -> pobierzPrywatnaWlasciwosc(); // wynik: "prywatna" ?>
Właściwości statyczne
Definicja właściwości może być dodatkowo poprzedzona słowem static - wtedy do operowania na nich nie jest potrzebny obiekt. Właściwość ta, jest dostępna bezpośrednio, za pomocą nazwy klasy, operatora :: oraz nazwy właściwości.
<?php class Przyklad { static $statyczna = 'właściwość statyczna'; } print Przyklad::$statyczna; // wynik: "właściwość statyczna" ?>
Warto dodać, że określając właściwość jako statyczną, możemy określić jej dostęp podobnie jak w przypadku zwykłych właściwości - dodając jeden z trzech rodzajów typu dostępu: public, protected lub private
Metody
Podobnie, jak właściwości, mogą być trzech typów - prywatne, publiczne i chronione. Metody definiuje się podobnie, jak zwykłe funkcje - tyle że słowo function poprzedzając odpowiednim typem metody (np. private - dla prywatnej).
<?php class Przyklad { // publiczna - dostępna wewnątrz, jak i na zewnątrz public function publicznaMetoda() { // ciało metody } // chroniona - dostępna wewnątrz klasy, jak i dla klas dziedziczących po niej protected function chronionaMetoda() { // ciało metody } // prywatna - dostępna tylko z metod tej klasy private function prywatnaMetoda() { // ciało metody } } ?>
Wewnątrz zwykłych metod, po stworzeniu obiektu danej klasy, można korzystać z innych metod i właściwości przez użycie specjalnej zmiennej $this oraz operatora ->.
<?php class Przyklad { private $wlasciwosc = 'właściwość'; public function pobierzWlasciwosc() { return $this -> wlasciwosc; } } $obiekt = new Przyklad; print $obiekt -> pobierzWlasciwosc(); // wynik: "właściwość" ?>
Metody statyczne
Metody, podobnie jak właściwości, mogą być zdefiniowane jako statyczne, dostępne są wtedy przez operator ::. Metody statyczne mogą odwoływać się jedynie do innych metod i właściwości statycznych - poprzez operator :: poprzedzony nazwą klasy lub specjalnym słowem self, które oznacza klasę, w której znajduje się metoda używająca tego słowa.
<?php class Przyklad { static private $wlasciwoscStatyczna = 'statyczna'; private $zwyklaWlasciwosc = 'zwykla'; static public function pobierzWlasciwoscStatyczna() { return self::wlasciwoscStatyczna; } public function pobierzZwyklaWlasciwosc() { return $this -> zwyklaWlasciwosc; } } Przyklad::pobierzWlasciwoscStatyczna(); // wynik: "statyczna" Przyklad::pobierzZwyklaWlasciwosc(); // błąd $obiekt = new Przyklad; print $obiekt -> pobierzZwyklaWlasciwosc(); // wynik: "zwykla" ?>
