我在这里搜索并阅读了很多关于PHP命名空间和访问类成员的帖子。当包装在自定义类中并包含在名称空间中时,我仍然无法引用SQLite3类。示例如下:
sqlite3_data_broker.php
namespace DataAccess\SQLiteDb;
class SQLiteBroker {
private $db, $db_pathname;
public function __construct ($dbPathName) {
$this->db_pathname = $dbPathName;
}
public function Open() {
$this->db = new SQLite3($this->db_pathname);
}
public function getPathName() {
return $this->db_pathname;
}
}
some_other_class.php
include('sqlite3_data_broker.php');
$the_db = new \DataAccess\SqliteDb\SQLiteBroker('K:\Path\To\Db\the_data.db');
echo 'Database Full Name: ' . $the_db->getPathName();
$the_db->Open();
将产生以下结果:
数据库全名:K:\Path\To\Db\the_data.db
致命错误:在线上的sqlite3_data_broker.php中找不到类'DataAccess \ SQLite3Db \ SQLite3'
使用命名空间我可以引用类成员,但不能引用包含在open()
函数中的SQLite3类。如果我删除命名空间并引用它,那就是调用代理类,如下所示:$the_db = new SQLiteBroker('K:\Path\To\Db\the_data.db')
,一切正常。
在包装SQLite3类时,我是否缺少或没有考虑过? 如果它归结为它我会删除命名空间,虽然它会很好。
PHP Version 5.4.6。
答案 0 :(得分:3)
具有全局前缀运算符\
的全限定名称:
$this->db = new \SQLite3($this->db_pathname);