Я не задаю типичный вопрос о том, почему какой-то код дал сбой, но я спрашиваю, почему он работал. Он работал со мной во время кодирования, и мне нужно было, чтобы он потерпел неудачу.
Случай
дочерний класс расширяет тот же самый абстрактный класс с защищенным конструктором
абстрактный класс BaseClass {
абстрактная защищенная функция __construct ();
}
class ChildClass extends BaseClass {
защищенная функция __construct () {
echo "Это работает";
}
}
class ParentClass extends BaseClass {
публичная функция __construct () {
новый ChildClass ();
}
}
// $ obj = new ChildClass (); // Приведет к фатальной ошибке. Ожидал!
$ obj = новый родительский класс (); // это работает !! ПОЧЕМУ?
Question
Родительский класс создает объект дочернего класса, и это работает !! как это происходит? Насколько мне известно, объект не может быть создан, если его конструктор объявлен защищенным, за исключением случаев, когда он является внутренним или внутри каких-либо подклассов путем наследования.
Родительский класс не является подклассом дочернего класса, он не наследует от него ни копейки (но оба расширяют один и тот же базовый абстрактный класс), так почему же создание экземпляра не завершается неудачно?
РЕДАКТИРОВАТЬ
] Этот случай происходит только с абстрактным базовым классом, который также имеет абстрактный конструктор. Если базовый класс Concerete или его защищенный конструктор не является абстрактным, создание экземпляра завершается неудачно, как и ожидалось ... это ошибка PHP? Для моего рассудка мне действительно нужно объяснение, почему PHP ведет себя именно так в этом очень конкретном случае.
Заранее спасибо