Metoda

Z PHPEdia.pl
(Przekierowano z Metody)
Skocz do: nawigacji, wyszukiwania

Metodą nazywamy funkcję zdefiniowaną wewnątrz klasy, na przykład:

<?php
class przyklad 
{
    function metoda() 
    {
        echo 'metoda';
    }
}
?>

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