abstract class SomeAbstract
{
protected $var = 'variable data';
}
class InheritedСlass extends SomeAbstract
{
public function someAction(SomeAbstract $someAbstract)
{
dump($someAbstract->var); // вот здесь не понятно, как protected var превратилась в public
}
}
Объектам одного и того же типа доступны защищённые и закрытые члены класса друг друга, даже если это разные экземпляры. Это связано с тем, что внутри таких объектов уже известны конкретные детали реализации.