Metody i właściwości statyczne
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 17 z 91.
Podobnie jak właściwości mogą być statyczne, metody również mogą należeć do samej klasy, a nie do poszczególnych obiektów. Metody statyczne wywołuje się bezpośrednio na klasie, bez konieczności wcześniejszego tworzenia instancji.
Deklarujesz metodę statyczną za pomocą słowa kluczowego static i wywołujesz ją, używając nazwy klasy oraz operatora :::
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
Wynik:
8
8Metody statyczne dobrze współpracują ze właściwościami statycznymi. Często stosowanym wzorcem jest użycie metody statycznej do zarządzania współdzielonymi danymi klasy:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
Wynik:
2Zauważ, że metody statyczne nie mogą używać $this, ponieważ nie ma instancji obiektu. Mogą uzyskiwać dostęp tylko do właściwości statycznych i innych metod statycznych za pomocą self::.
Najważniejsza informacja: Metody statyczne są przydatne w przypadku funkcji użytkowych, które nie potrzebują stanu obiektu, lub do zarządzania danymi na poziomie klasy. Zapewniają funkcjonalność bez konieczności tworzenia instancji obiektu.
Wyzwanie
ŁatwyZbudujmy system generatora identyfikatorów, który używa metod i właściwości statycznych do tworzenia unikalnych identyfikatorów bez konieczności tworzenia instancji obiektów.
Utworzysz dwa pliki, aby uporządkować swój kod:
IdGenerator.php: Zdefiniuj klasęIdGenerator, która zarządza generowaniem unikalnych identyfikatorów, używając wyłącznie składowych statycznych. Klasa powinna mieć prywatną właściwość statyczną$lastId, której początkowa wartość to0, oraz prywatną właściwość statyczną$prefixustawioną na"ID". Utwórz metodę statycznągenerate(), która zwiększa wartość ostatniego identyfikatora i zwraca sformatowany ciąg łączący prefiks z nowym identyfikatorem (na przykład"ID1","ID2"itd.). Dodaj metodę statycznąsetPrefix($newPrefix), która zmienia prefiks, oraz metodę statycznągetLastId(), która zwraca bieżącą wartość$lastId.main.php: Dołącz plik klasy IdGenerator. Wygeneruj dwa identyfikatory z domyślnym prefiksem i wypisz każdy w osobnym wierszu. Następnie zmień prefiks na"USER"za pomocą metody statycznej, wygeneruj dwa kolejne identyfikatory i wypisz każdy z nich. Na koniec wypisz numer ostatniego identyfikatora, wywołując odpowiednią metodę statyczną.
Pamiętaj, że metody statyczne wywołuje się bezpośrednio na klasie za pomocą ClassName::methodName(), a wewnątrz klasy dostęp do właściwości statycznych uzyskuje się za pomocą self::$propertyName. Ponieważ nie ma instancji obiektu, w metodach statycznych nie możesz używać $this.
Wynik powinien pokazywać kolejne identyfikatory z różnymi prefiksami, demonstrując, jak właściwości statyczne zachowują swoje wartości przy wielokrotnych wywołaniach metod.
Spróbuj swoich sił
<?php
// Dołącz plik klasy IdGenerator
require_once 'IdGenerator.php';
// TODO: Wygeneruj dwa identyfikatory z domyślnym prefiksem i wypisz każdy w osobnym wierszu
// TODO: Zmień prefiks na "USER" za pomocą metody statycznej
// TODO: Wygeneruj dwa kolejne identyfikatory i wypisz każdy w osobnym wierszu
// TODO: Wypisz numer ostatniego identyfikatora za pomocą odpowiedniej metody statycznej
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online