gpt4 book ai didi

PHP 在全局命名空间中使用类

转载 作者:行者123 更新时间:2023-12-04 00:03:31 25 4
gpt4 key购买 nike

我有一个使用 PDO 的 DB 包装类,在构造函数中我创建了一个 PDO 对象。包装器类在我们的命名空间中,我们正在使用自动加载器。问题是在我们的命名空间中找不到 PDO 类,因此我尝试使用全局命名空间,如 here 所述.

//Class file
namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new PDO(...);
}
}

有了这个,我得到了这个(如预期的那样):

Warning: require(...\vendors\Company\Common\PDO.class.php): failed to open stream

如果我这样做:

namespace Company\Common;
use PDO;

我明白了:

Fatal error: Class 'DB' not found in ...\includes\utils.php

而 utils.php 在错误行中包含此内容,在实现命名空间之前它工作正常:

DB::getInstance();

或者我试过这个:

namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new \PDO(...);
}
}

它试图像最初那样在我们的命名空间中加载 PDO 类。

我该如何解决这个问题?我想通过 use PDOnew\PDO 它会加载全局 PDO 类,但它似乎不起作用?

最佳答案

在命名空间 PHP 中,对类的引用必须包含该类的命名空间,除非您有包含该类或其命名空间的一部分的 use 语句。

因此,如果您没有针对它的use 语句,则必须使用前导反斜杠引用 PDO 和其他全局类——即 $obj = new\PDO();

如果您有一个引用该类的use 语句,那么您可以仅通过类名来引用它:

use PDO;
....
$obj = new PDO();

如果您引用了很多全局类,如果您想避免每次都使用反斜杠,则需要单独使用它们中的每一个。

关于PHP 在全局命名空间中使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com