Klasa

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

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