Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 扩展没有命名空间的类时发生致命错误_Php_Namespaces - Fatal编程技术网

Php 扩展没有命名空间的类时发生致命错误

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

我有两个类,数据库和状态。该类数据库未分配命名空间。以文件States.php编写的类States的命名空间分配如下:

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手册。

谢谢。只有在数据库之前添加\才能完成此作业。