#php
Почему выводит 1010? c; } } class B extends A{ public $c = 10; public function b(){ echo $this->c.$this->a(); } } $obj = new a(); $obj->a(); ?>
Ответы
Ответ 1
В php4, чтобы задать конструктор нужно было создать метод, совпадающий с именем класса class MyClass { function MyClass(){} } Эта конструкция была сохранена в php5 для обратной совместимости. http://php.net/manual/ru/language.oop5.decon.php В целях обратной совместимости, если PHP 5 не может обнаружить объявленный метод __construct() и этот метод не наследуется от родительских классов, то вызов конструктора произойдет по устаревшей схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct(), использующиеся для других целей. В отличие от других методов, PHP не будет генерировать ошибку уровня E_STRICT, если __construct() будет перекрыт методом с другими параметрами, отличными от тех, которые находятся в родительском __construct(). Начиная с версии PHP 5.3.3, методы с именами, совпадающими с последним элементом имени класса, находящимся в пространстве имен, больше не будут считаться конструкторами. Это изменение не влияет на классы, не находящиеся в пространстве имен.
Комментариев нет:
Отправить комментарий