Проблемы с пространствами имен PHP и встроенными классами, как их исправить? - PullRequest
24 голосов
/ 01 августа 2011

Я пишу небольшую библиотеку на PHP и у меня возникли некоторые проблемы со встроенными классами, которые не читаются.Например:

namespace Woody;

class Test {
  public function __construct() {
    $db = new PDO(params);
  }
}

Это дает мне:

Неустранимая ошибка PHP: класс 'Woody \ PDO' не найден в /var/www/test.php

Ответы [ 3 ]

38 голосов
/ 01 августа 2011

Это:

namespace Woody;
use PDO;

Или:

$db = new \PDO(params);

Дело в том, что класс PDO не является полным именем в вашем пространстве имен, поэтому PHP будет искать Woody\PDO, который недоступен.

См. Правила разрешения имен Документы для подробного описания того, как имена классов разрешаются в Полное имя .

5 голосов
/ 01 августа 2011

Добавьте обратную косую черту перед именем класса, т.е.

$db = new \PDO(params);
3 голосов
/ 01 августа 2011

Должно работать ниже:

namespace Woody;

class Test {
    public function __construct() {
        $db = new \PDO(params);
    }
}

Вам необходимо поставить префикс PDO с обратной косой чертой, чтобы PHP знал, что он находится в глобальном пространстве имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...