Пространство имен php не может найти класс SQLite3

Я искал и прочитал много постов здесь относительно пространств имен 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

Неустранимая ошибка: класс "DataAccess\SQLite3Db\SQLite3" не найден в sqlite3_data_broker.php в строке...

Используя пространство имен, я могу ссылаться на членов класса, но не на класс SQLite3, заключенный в open() функция. Если я удаляю пространство имен и ссылки на него, то есть вызываю класс брокера следующим образом: $the_db = new SQLiteBroker('K:\Path\To\Db\the_data.db'), все отлично работает.

Есть что-то, что я пропускаю или не рассматриваю при упаковке класса SQLite3? Если до этого дойдет, я уберу пространство имен, хотя было бы неплохо иметь его.

Версия PHP 5.4.6.

1 ответ

Решение

Полное имя с глобальным префиксным оператором \:

$this->db = new \SQLite3($this->db_pathname);

http://php.net/manual/en/language.namespaces.basics.php

Другие вопросы по тегам