требуемый класс внутри пространства имен не может быть создан

Хорошо, я сделал 3 файла, которые у меня есть index.php где я включаю namespace.php где у меня есть 2 функции:

Namespace namespaceName{

class classLoader{
public function __construct() {
//not used
}

public function executeFunctionOutsideTheNamespace() {
include("class.php");
new classExtended("badass");
}
}

class classBase{
public function __construct(){

}
}
}

Теперь из index.php я пытаюсь динамически вызвать функцию из третьего файла class.php где класс, который расширяет один класс из namespaces, Здесь class.php код

class classExtended extends namespaceName\classBase
{
public function __construct($action) {
echo $action;
}
}

И конечно мой index.php файл

require("namespace.php");

$namespace= new namespaceName\classLoader();
$oController = $namespace->executeFunctionOutsideTheNamespace();

$oController это пример classLoader() право? теперь я вызываю функцию executeFunctionOutsideTheNamespace из класса classLoader() из пространства имен namespaceName и я говорю include("class.php"); и создание расширенного класса ведьмы является основанием classBase от Namespace. Я повторяю Fatal error: Class 'namespaceName\classExtended' not found in C:\xampp\htdocs\exercices\namespace.php on line 10

1

Решение

Дело в том, что class.php было include()Эд внутри classLoader класс, который находится внутри namespaceName Пространство имен не заставляет его наследовать пространство имен из включающего файла.

Так в том числе class.php загружает класс classExtended в глобальное пространство имен, то есть для доступа к нему, как ваш код, вам нужно будет использовать

new \classExtended("cool");

Чтобы получить classExtended в пространство имен namespaceName, поскольку он находится в своем собственном файле, вам нужно объявить пространство имен в этом файле. Это также означает, что вам нужно удалить namespaceName от extends объявление, чтобы PHP не начал искать вложенный namespaceName\namespaceName\classBase, Файл class.php должен стать

namespace namespaceName;

// Declare the class without the namespace in extends
// since classExtended is now in the same namespace as classBase
class classExtended extends classBase
{
public function __construct($action) {
echo $action;
}
}

Я настоятельно рекомендую ознакомиться с Стандарт автозагрузки класса PSR-4 определяется группой взаимодействия PHP Framework и использовать Композитор для обработки вашего класса автозагрузки. Пространство имен становится в основном вопросом компоновки файловой системы, и включение файла обрабатывается автоматически.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]