[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кто пояснит, что за дела?
chee
Не могу найти обоснование сему поведению

<?php
class
a
{
function __construct(stdClass $i = null) {

}
}


class b extends a
{
function __construct(array $i = null) {

}
}


Ошибки нет

<?php
class
a
{
function x(stdClass $i = null) {

}
}


class b extends a
{
function x(array $i = null) {

}
}


Ошибка есть.

На конструктор не распространяются принципы Лисков?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Все, закрывать можно. Нашел тут https://www.php.net/manual/ru/language.oop5...bject.construct

Цитата

В отличие от других методов, PHP не будет генерировать ошибку уровня E_STRICT, если __construct() переопределяется с другими параметрами, отличными от тех, которые были объявлены в родительском методе __construct().


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Zzepish
В 7.4 теперь не выдает ошибку в обеих вариантах (они выпилили поддержку L из SOLID).

P.S. Ан нет (странно, везде писали, что L будет попрана). На 7.4 проверил - все по-старому.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.