Задать вопрос
@Pro_Code

Часть кода из паттерна — компоновщик. Имеем — абстрактный класс, и класс — наследник. Собственно, как такое происходит?

Абстрактный класс:
abstract class SomeAbstract
{
     protected $var = 'variable data';
}


Наследник:
class InheritedСlass extends SomeAbstract
{
     public function someAction(SomeAbstract $someAbstract)
     {
          dump($someAbstract->var); // вот здесь не понятно, как protected var превратилась в public
     }
}
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@66demon666
Сетевой админ, АТС-админ
Вы protected с private путаете, или я не понял вопрос
Ответ написан
@Pro_Code Автор вопроса
Попробую упростить вопрос до минимума(на примере Laravel):

Имеем некий базовый класс с публичным свойством:
class SomeClass
{
    public $var = 'Hello, world!';
}


Имеем второй класс, где внедряем зависимость базового класса:
class TestClass
{
    public function action(SomeClass $someClass)
    {
        return $someClass->var;
    }
}


Проверяем:
public function index(TestClass $testClass)
{
    dd( $testClass->action(new SomeClass()) ); // выводит - 'Hello, world!'
}


Изменяем свойство класса SomeClass на protected:
class SomeClass
{
    protected $var = 'Hello, world!';
}


Проверяем:
public function index(TestClass $testClass)
{
    dd( $testClass->action(new SomeClass()) ); // получаем ошибку - Cannot access protected property
}


Наследуемся в классе TestClass:
class TestClass extends SomeClass
{
    public function action(SomeClass $someClass)
    {
        return $someClass->var;
    }
}


Проверяем:
public function index(TestClass $testClass)
{
    dd( $testClass->action(new SomeClass()) ); // выводит - 'Hello, world!'
}


Так вот: каким образом наследование влияет на свойство(теперь работает и с public и с protected)?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы