Этот код работает без проблем:
<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}
namespace NamespaceB;
class B {}
Но почему следующий код вызывает Неустранимая ошибка: класс ‘NamespaceB \ B’ не найден в … файле?
<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}
namespace NamespaceB;
class B extends \NamespaceC\C {}
namespace NamespaceC;
class C {}
И этот код также работает без проблем:
<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}
namespace NamespaceC;
class C {}
namespace NamespaceB;
class B extends \NamespaceC\C {}
UPD:
Без какого-либо пространства имен, также Неустранимая ошибка: класс «B» не найден в … файле:
<?php
class A extends B {}
class B extends C {}
class C {}
Работает без проблем:
<?php
class A extends B {}
class B {}
http://php.net/manual/en/keyword.extends.php
Классы должны быть определены до их использования. Если вы хотите, чтобы класс A расширял класс B, вам сначала нужно будет определить класс B. Порядок, в котором определяются классы, важен.
Редактировать:
Найдено больше:
Неустранимая ошибка при расширении включенного класса
После некоторых исследований стало ясно, что на самом деле вы можете использовать класс, прежде чем объявить его. Но объявление класса и всех родительских классов должно быть в одном файле.
Поэтому, если вы объявите родительский класс в одном файле и дочерний класс в другом, он не будет работать.
Кроме того, вы должны сначала объявить родительские классы. После этого вы можете расширить их.
Редактировать номер 2:
Итак, я провел еще несколько исследований по этому вопросу. Вероятно, есть некоторая внутренняя деталь реализации, которая в настоящее время позволяет работать одному случаю (я думаю, что это будет что-то, касающееся автозагрузки), однако это то, что может измениться в любое время и никогда не следует полагаться
Сначала используйте include_once (), чтобы добавить все файлы в индексный файл, а когда вы расширяете какой-либо класс, сначала создайте экземпляр этого родительского класса. Пример:
index.php-->
<?php
include_once('parentClass.php');
include_once('childClass.php');
$parentObj = new parent();
$childObj = new child();
?>
child.php-->
<?php
class child extends parent{
function __construct(){
}
}
?>