Php 扩展没有命名空间的类时发生致命错误
我有两个类,数据库和状态。该类数据库未分配命名空间。以文件States.php编写的类States的命名空间分配如下:Php 扩展没有命名空间的类时发生致命错误,php,namespaces,Php,Namespaces,我有两个类,数据库和状态。该类数据库未分配命名空间。以文件States.php编写的类States的命名空间分配如下: namespace Resources; require_once 'database.php'; $states = new States(); echo $states->readAll(); class States extends Database{ private $db; public function __const
namespace Resources;
require_once 'database.php';
$states = new States();
echo $states->readAll();
class States extends Database{
private $db;
public function __construct(){
$this->db = new Database();
}
function readAll(){
return $this->db->Execute('SELECT * FROM states;');
}
}
如果我输入urlhttp://localhost/mydomain/objects/states.php 它应该实例化该类并显示状态列表,引发的错误如下:
致命错误:未捕获错误:在中找不到类“Resources\Database”
第5行的C:\xampp\htdocs\mydomain\objects\states.php
如果我删除行名称空间资源;代码运行
我最近决定在我的网站中实现名称空间,所以很可能是我做错了什么
有什么帮助吗?这本PHP手册很值得一读。特别是,请看一下:
同样的原则也适用于PHP中的命名空间元素。对于
例如,可以通过三种方式引用类名:
非限定名称,或未固定的类名,如$a=new foo;或者foo::staticmethod;。如果当前命名空间是currentnamespace,
此解析为currentnamespace\foo。如果代码是全局的,
非命名空间代码,解析为foo。
限定名称,或带前缀的类名,如$a=new subnamespace\foo;或子名称空间\foo::staticmethod;。如果
当前命名空间为currentnamespace,解析为
currentnamespace\subnamespace\foo。如果代码是全局的,
非命名空间代码,解析为subnamespace\foo。
完全限定名,或带有全局前缀运算符的前缀名,如$a=new\currentnamespace\foo;或
\currentnamespace\foo::staticmethod;。这总是解决问题
代码中指定的文字名称currentnamespace\foo。
在您的示例中,数据库是非限定名称,因此第1点适用。当前名称空间是Resources,因此它引用Resources\Database。如果删除名称空间资源;第行,代码变为全局的、非命名空间的代码,因此它只引用数据库
要在当前命名空间为Resources时引用类数据库,可以使用完全限定名,如第3点所述。因此,在本例中,您将编写类States extends\Database
还有其他方法可以编写它,例如,但是我没有必要在这里复制整个PHP手册。谢谢。只有在数据库之前添加\才能完成此作业。