gpt4 book ai didi

php - 命名空间内的必需类无法实例化

转载 作者:行者123 更新时间:2023-12-04 16:51:26 26 4
gpt4 key购买 nike

好的,我制作了 3 个文件 index.php其中我包括 namespace.php我有两个功能:

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();
$oControllerclassLoader() 的实例对?现在我调用函数 executeFunctionOutsideTheNamespace来自类 classLoader()来自命名空间 namespaceName我告诉 include("class.php");并实例化扩展类女巫是 classBase fromNamespace 的一种延伸。我记了一个 Fatal error: Class 'namespaceName\classExtended' not found in C:\xampp\htdocs\exercices\namespace.php on line 10

最佳答案

事实class.phpinclude()编辑内部 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 class autoloading standard由 PHP 框架互操作性组定义,并使用 Composer处理您的类自动加载。命名空间主要是文件系统布局的问题,文件包含是自动处理的。

关于php - 命名空间内的必需类无法实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com