PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Programowanie obiektowe > Lekcja 4

Metody i właściwości statyczne

W niektórych sytuacjach tworzenie obiektu może być bezcelowe, jednak chcielibyśmy nadal użyć klas. Z pomocą przychodzą nam tutaj właściwości lub metody statyczne, do których możemy się odwołać bez tworzenia obiektu. Warto powiedzieć, że zdecydowanie odchodzi się od nich i nie zaleca zbyt częstego stosowania. Jednak czasem mogą być przydatne, dlatego omówimy je sobie.

Aby dana właściwość/metoda była statyczna wystarczy jeden prosty zabieg - dodanie w deklaracji słówka static. Teoretycznie możemy to zrobić w dowolnym miejscu: za modyfikatorem dostępu lub przed), ale standardy PSR-2 (które już nie raz przywoływałem) mówią iż należy robić to za modyfikatorem dostępu. I tego będziemy się trzymać.

W praktyce wygląda to na przykład tak:

<?php
class Operation
{
    public static $number1 = 5;

    public static function addition(int $number2, int $number3): int
    {
        return $number2 + $number3;
    }
}

Dostęp do statycznej właściwości/metody uzyskujemy poprzez :: (dwa znaki dwukropka). Nie tworzymy obiektu (bo przecież nie o to nam chodzi), nie używamy new. Nie działa tutaj również ->, który jest operatorem tylko do obiektów (a tutaj mamy samą klasę).

<?php
class Operation
{
    public static $number1 = 5;

    public static function addition(int $number2, int $number3): int
    {
        return $number2 + $number3;
    }
}

echo Operation::$number1; // result 5
echo Operation::addition(4, 2); // result 6

Podobnie nie mamy tutaj $this (również używany tylko na obiektach). W celu odwołania się do tej samej klasy należy skorzystać z self.

<?php
class Operation
{
    private static $number1 = 5;

    public static function addition(int $number2): int
    {
        return self::$number1 + $number2;
    }
}

echo Operation::addition(2); // result 7

Zarówno użycie -> lub $this na właściwości czy metodzie statycznej spowoduje wygenerowanie odpowiedniego błędu. W końcu gdy nie mamy obiektu ciężko coś na nim zrobić ;)

Do rzeczy statycznych mamy globalny dostęp. Obiekt tworzymy w odpowiednim miejscu i aby coś zrobić, trzeba to po prostu zrobić na nim. Wywołać metodę lub dostać się do właściwości statycznej możemy właściwie w każdej chwili. Tracimy więc pewną kontrolę nad tym kiedy i do czego jest dostęp. Z resztą powinieneś pamiętać lekcję z początku funkcji, gdzie przestrzegałem przed używaniem zmiennych globalnych. Nadmienię też, że właściwości statyczne są wspólne dla danej klasy. Może to być użyteczne w wielu sytuacjach, na przykład gdybyśmy chcieli zliczyć ilość instancji.

A więc jak mówiłem na początku: elementy statyczne nie powinny być nadużywane. Z pewnością nie jest to rzecz niezbędna, jednak czasem mogą okazać się przydatne. Przemyśl, czy na pewno tworząc coś statycznego musi ono takie być - może warto zaprojektować dany fragment aplikacji inaczej?

Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze