Может кто-нибудь объяснить, почему приведенный ниже код работает, по крайней мере, для вызова защищенного метода:
<?php
class Component
{
public function callMethod($obj, $method)
{
return $obj->$method();
}
}
class Component1 extends Component
{
public function aPublicMethod()
{
return 'called aPublicMethod()';
}
protected function aProtectedMethod()
{
return 'called aProtectedMethod()';
}
private function aPrivateMethod()
{
return 'called aPrivateMethod()';
}
}
class Component2 extends Component
{}
$component1 = new Component1();
$component2 = new Component2();
echo $component2->callMethod($component1, 'aPublicMethod'); // works
echo $component2->callMethod($component1, 'aProtectedMethod'); // works
echo $component2->callMethod($component1, 'aPrivateMethod'); // returns an error because the private method is not accessible
Это просто потому, что оба объекта происходят из одного и того же родительского класса, и эта контекстная информация позволяет Component2 получить доступ Защищенные методы Component1 (и свойства)? Это было просто кое-что, с чем я столкнулся с каркасом, который придерживается подобного стиля и пытался выяснить, почему второй объект все еще был в состоянии получить доступ к защищенному методу из другого объекта.