【问题标题】:Problems with PHP namespaces and built-in classes, how to fix?PHP 命名空间和内置类的问题,如何解决?
【发布时间】:2011-10-17 14:22:14
【问题描述】:

我正在用 PHP 编写一个小型库,但我遇到了一些无法读取内置类的问题。例如:

namespace Woody;

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

这给了我:

PHP 致命错误:在 /var/www/test.php 中找不到类“Woody\PDO”

【问题讨论】:

标签: namespaces php


【解决方案1】:

这个:

namespace Woody;
use PDO;

或者:

$db = new \PDO(params);

以防万一,PDO 类不是您命名空间中的完整限定名称,因此 PHP 会查找不可用的 Woody\PDO

请参阅Name resolution rulesDocs 了解如何将类名解析为完全限定名的详细说明。

【讨论】:

  • 感谢您提供比我自己更好的答案。我知道解决方案,但我没有像你那样解释清楚!
  • \PDO 方法在 PHP 5.5.12 中对我不起作用,但这样做:use PDO;
  • @tastro:我认为使用use 也是一种很好的做法。然后你可以在文件的顶部看到哪些类被录取了。
【解决方案2】:

类名前加反斜杠,即

$db = new \PDO(params);

【讨论】:

    【解决方案3】:

    以下应该可以工作:

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

    您需要在 PDO 前面加上反斜杠,以便 PHP 知道它在全局命名空间中。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2012-02-15
      • 2012-03-22
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多