【发布时间】:2015-02-24 12:12:39
【问题描述】:
好的,我制作了 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() 的实例,对吗?现在我从命名空间namespaceName 中的类classLoader() 中调用函数executeFunctionOutsideTheNamespace 并告诉include("class.php"); 并实例化扩展类女巫是classBase fromNamespace 的一个本质。我回复Fatal error: Class 'namespaceName\classExtended' not found in C:\xampp\htdocs\exercices\namespace.php on line 10
【问题讨论】:
-
对 - 文件
class.php没有声明命名空间,因此在全局命名空间中也是如此。它不会继承包含它的文件的命名空间,因此您需要使用new \classExtended()。这是你的问题吗? -
是的,我的类在
globalNamespace\classExtended()中,我的命名空间是namespaceName,所以我希望扩展namespaceName\classBase的类也在namespaceName中而不是在@ 之外987654344@ 我的问题是我如何在namespaceName中包含扩展类? -
您需要将它放在
namespaceName中,并在其文件顶部声明namespace namespaceName;我将在下面写这个作为答案。 -
好的,我需要像这样扩展全局命名空间
class classExtended extends \namespaceName\classBase -
或者在扩展时只保留命名空间,如下所示。由于它们已经在同一个命名空间中,因此您无需为其添加前缀。
标签: php class namespaces include loader