В практическом тесте был интересный вопрос, на который я не понял ответа. Какой выход из следующего кода:Вызов статического метода из класса B (который расширяет класс A) класса A
<?php
class Foo {
public $name = 'Andrew';
public function getName() {
echo $this->name;
}
}
class Bar extends Foo {
public $name = 'John';
public function getName() {
Foo::getName();
}
}
$a = new Bar;
$a->getName();
?>
Сначала я подумал, что это приводит к ошибке, так как статические методы не могут ссылаться на $ это (по крайней мере в PHP5). Я испытал это сам, и на самом деле он выводит Джона.
Я добавил Foo :: getName(); в конце скрипта и получил ошибку, которую я ожидал. Итак, что изменяется, когда вы вызываете статический метод из класса, который расширяет класс, из которого вы звоните?
Не мог бы кто-нибудь объяснить подробно, что здесь происходит?
Есть ли символ super :: в PHP? Единственный, о котором я могу думать, это parent :: для статических классов. –
супер, похоже, не работает, родитель делает. – notruthless
Вы правы, меня перепутали – Ulf