Получить свойство родительского класса
Как явно обратиться в свойству родительского класса? Например:
class Parent
{
protected $str = 'Hello';
...
}
class Child extends Parent
{
private $str = 'World';
public function run()
{
echo $this->str;
* В этом случае выведется "World"
* Как мне вывести свойство родительского класса, если названия свойств совпадают в классах?
* Т.е. как мне вывести переменную со значением "Hello"
* Если в дочернем классе не создавать переменную $str, то выведется "Hello"
* Как это связывание называется и где можно почитать? P.S слышал что-то про позднее статическое связывание, но это не относится к этому наверно
}
}
Ответы (2 шт):
Автор решения: Ivan Dudarev
→ Ссылка
Если Вам нужно получить свойство родительского класса, не следует его переопределять в дочернем. А называется это, как ни странно, наследование
Автор решения: Макс Максимус
→ Ссылка
Не совсем понятно, зачем необходимо реализовать такую задумку, но это возможно, например, с помощью рефлексии: https://www.php.net/manual/ru/book.reflection.php. Для решения вашей задачи модно сделать следующее. Перенесем метод run() в родительский класс:
class ParentClass
{
private $str = 'Hello';
public function run()
{
echo $this->str;
}
}
class ChildClass extends ParentClass
{
private $str = 'World';
}
Далее воспользуемся Reflection API:
// узнаем, есть ли у нашего класса родитель и если есть, то
// получаем его имя
$class = new ReflectionClass('ChildClass');
$parent = $class->getParentClass();
if($parent) {
$parent = $parent->name;
}
var_dump($parent); // string(11) "ParentClass"
// Далее мы можем исследжовать свойства родительского класса
$class = new ReflectionClass($parent);
$property = $class->getProperty('str');
echo $property->name; // str
// Т.е. теперь мы узнали, что у родительского класса тоже есть свойство $str
// и мы можем брать и использовать именно его значения для дальнейших манипуляций
echo (new $parent)->run(); // Hellow
Единственно, имейте ввиду, что рефлексия требует больше ресурсов, поэтому ей не следует пользоваться без особой надобности.