Parent odnosi się do metod/atrybutów klasy bazowej:
<?php class A { public function foo() { return 'class A, method foo()'; } } class B extends A{ public function foo() { return 'class B, method foo() and parent: ' . parent::foo(); } } $object = new B; echo $object->foo();Powyższy kod dana nam wynik:
class B, method foo() and parent: class A, method foo()
Self odnosi się do metod/atrybutów klasy, które są zdefiniowane w bieżącym kodzie, czyli jeżeli mam klasę A w niej metody foo() i boo(), gdzie chcę, żeby metoda foo() zaimplementowana w klasie A, zawsze odnosiła się do metody boo() z klasy A, nawet jeżeli w klasach potomnych zostanie nadpisana, to właśnie wtedy stosujemy słowo kluczowe self:
<?php class A { public function foo() { return self::boo(); } public function boo() { return 'A::boo()'; } } class B extends A{ public function boo() { return 'B::boo()'; } } $object = new B; echo $object->foo(); echo '<br/>'; echo $object->boo();Wynikiem będzie:
A::boo() B::boo()
Static odnosi się do metod/atrybutów danej instancji klasy. Najczęściej jest wykorzystywany w metodach statycznych w celu zapewnienia, że wewnątrz zawsze będzie wykonywana metoda z najniższej (ostatniej dziedziczącej) klasy potomnej. Działa tak samo, jak zastosowanie $this w metodach nie statycznych, czyli jeżeli metoda została nadpisana, to zostaje wywołana metoda, która ją nadpisała. W poniższym przykładzie domyślnie wykonywaną metodą jest __construct().
<?php class A { static public function create() { return new static; } } class B extends A{} $objectA = A::create(); $objectB = B::create(); echo get_class($objectA); echo '<br/>'; echo get_class($objectB);Wynik to:
A B
Ciekawy artykuł. Pozdrawiam.
OdpowiedzUsuń