Metoda
Z PHPEdia.pl
Metodą nazywamy funkcję zdefiniowaną wewnątrz klasy, na przykład:
<?php class przyklad { function metoda() { echo 'metoda'; } } ?>
Spis treści |
Wywoływanie metod
Metodę można wywołać dwoma sposobami - tworząc obiekt (przez strzałeczkę: ->) oraz przez operator :: (tzw. metody statyczne), na przykład:
<?php $obiekt = new przyklad; $obiekt->metoda(); //wyświetli 'metoda' przykład::metoda(); //to tez wyświetli 'metoda' ?>
Należy jednak uważać aby metody wywoływane statycznie (poprzez ::) nie odwoływały się do innych metod klasy poprzez zmienną $this - ponieważ obiekt nie został utworzony!
Dostępność metod
W PHP 5 jest możliwe definiowanie dostępu do metod. Metoda może być publiczna (public), prywatna (private) lub chroniona (protected). Słowa te umieszczamy przed wyrazem function, czyli:
<?php class przyklad { public function metoda() { echo 'metoda'; } } ?>
Prywatne
Metody prywatne możemy wywołać się jedynie wewnątrz danej klasy - nigdy z zewnątrz.
Publiczne
Możemy je wywołać zarówno z wnętrza klasy, jak i z zewnątrz.
Chronione
Wykorzystywane jedynie przy dziedziczeniu klas - klasa dziedzicząca może wywołać metody chronione z klasy dziedziczonej:
<?php class Ojciec { protected function chroniona() { echo 'metoda chroniona'; } private function prywatna() { echo 'metoda prywatna'; } } class Syn extends Ojciec { public function wywolajChroniona() { return $this->chroniona(); } public function wywolajPrywatna() { return $this->prywatna(); } } $syn = new Syn; echo $syn->wywolajChroniona(); // wydrukuje 'metoda chroniona' echo $syn->wywolajPrywatna(); // błąd! ?>
Końcowe
Metoda może również być zdefiniowana jako tzw. końcowa (słowo kluczowe final). Wtedy w przypadku dziedziczenia nie zostanie ona nadpisana, na przykład.
<?php class przyklad { final function metoda() { echo 'metoda koncowa'; } } class Drugiprzyklad extends przykład { function metoda() { echo 'metoda z drugiego przykładu'; } } ?>
Teraz, gdy wywołamy Drugiprzyklad::metoda() w wyniku dostaniemy 'metoda koncowa'.
Statyczne
W PHP 5 istnieje możliwość definiowania metod jako statycznych. Używamy do tego słowa kluczowego static. Do metody zdefiniowanej jako statyczna możemy odwoływać się tylko za pomocą operatora ::. Dodatkowo, interpreter PHP zadba, abyśmy nie wyszli poza kontekst klasy, czyli innymi słowy, nie próbowali skorzystać z danych i metod specyficznych dla obiektu danej klasy (nie można używać zmiennej $this). Możemy odwoływać się jedynie do właściwości statycznych oraz innych metod statycznych danej klasy (oraz, oczywiście, wszystkiego co do tej klasy nie należy, czyli globalnych zmiennych, funkcji, statycznych metod i właściwości oraz stałych innych klas) za pomocą stałej self i operatora ::. Oto przykładowy kod:
<?php class przykladowaKlasa { // właściwość statyczna private static $name = 'Jan'; // zwykła właściwość private $surname = 'Nowak'; public function metodaNieStatyczna() { // możemy korzystać i z $this i z self echo 'Nazywam sie: ' . self::$name . ' ' . $this->surname; } public static function metodaStatyczna() { // korzystanie z $this zabronione! echo 'Mam na imie: ' . self::$name; //! echo ', a na nazwisko: ' . $this->surname; // wywoła błąd } } ?>
