在 PhpStorm 中找不到 PDO class
PDO class could not be found in PhpStorm
所以,这是我项目中的一些代码。最近开始使用 PDO 方法连接到数据库等。问题是我正在使用的 IDE (PhpStorm) 由于某种原因无法找到任何 PDO
class是的。 PhpStorm 只是在单词下方显示一条黄线并表示 'Undefined class PDO'。
奇怪的是,如果我在单词 PDO
前加上一个 \
,(即 \PDO
),那么现在可以找到 class。我知道,通过一些研究,您可以像这样 use \PDO
那样包含它,但我真的不想这样做。
最后,想提一下 PhpStorm 的外部库中包含 PDO,这更加令人困惑,但希望你们能够帮助我解决这个问题。
EDIT - Answer
好的,在一些帮助之后我找到了为什么我会遇到这个问题。在这个文件的顶部我有 namespace App\DB;
因为这个 Php 无法找到 PDO
class。所以,实际上在前面放一个\
实际上是正确的做法。
非常感谢 IMSoP、tete0148、Jim Wright。
只需在 class 名称前添加一个反斜杠,因为 PHP 标准 classes 位于根命名空间中。
\PDO
\PDOException
或者在文件顶部添加 use 语句。
use \PDO;
use \PDOException;
请注意,PHPStorm 可以在光标位于警告上方时按 alt+enter 自动导入 classes。
@yann-chabot(已删除)的回答是正确的,如果您在 class 之前添加 \
,它会起作用,但他不清楚为什么。
在PHP中,反斜杠用于确定命名空间,PDO class在根命名空间中。
如果您与另一个class处于同一个命名空间,则使用时无需指定命名空间。否则,您应该指定命名空间。
将命名空间视为文件夹的一种简单方式。
有关详细信息,请参阅 PHP manual。
我认为你已经得出结论 PHPStorm 告诉你的是错误的,但实际上你需要学习 how namespaces in PHP work。
- 向 class 名称添加前导反斜杠是引用其绝对命名空间路径的一种方式。
- 在这种情况下,PDO classes 位于根命名空间中,因此它们只是
\PDO
等;如果它们位于名为 Acme\Widgets
的命名空间中,您可以将 \Acme\Widgets\PDO
写为完全限定的 class 名称。
- 如果您正在编写的文件本身在特定命名空间中声明代码,那么像这样完全限定名称是必要的;也就是说,如果文件顶部有
namespace
关键字。在这种情况下,裸名 PDO
被假定为 class 在您正在编写代码的同一名称空间中 。如果您的文件以 namespace ZOulhadj\DB
开头,那么 new PDO
将被展开,就好像您写的是 new ZOulhadj\DB\PDO
.
- 如果是这样的话,不只是PHPStorm找不到class——PHP本身也会找不到[=34] =]. PHPStorm 向您指出一个错误,因此您可以在 运行 代码之前修复它。
所以,这是我项目中的一些代码。最近开始使用 PDO 方法连接到数据库等。问题是我正在使用的 IDE (PhpStorm) 由于某种原因无法找到任何 PDO
class是的。 PhpStorm 只是在单词下方显示一条黄线并表示 'Undefined class PDO'。
奇怪的是,如果我在单词 PDO
前加上一个 \
,(即 \PDO
),那么现在可以找到 class。我知道,通过一些研究,您可以像这样 use \PDO
那样包含它,但我真的不想这样做。
最后,想提一下 PhpStorm 的外部库中包含 PDO,这更加令人困惑,但希望你们能够帮助我解决这个问题。
EDIT - Answer
好的,在一些帮助之后我找到了为什么我会遇到这个问题。在这个文件的顶部我有 namespace App\DB;
因为这个 Php 无法找到 PDO
class。所以,实际上在前面放一个\
实际上是正确的做法。
非常感谢 IMSoP、tete0148、Jim Wright。
只需在 class 名称前添加一个反斜杠,因为 PHP 标准 classes 位于根命名空间中。
\PDO
\PDOException
或者在文件顶部添加 use 语句。
use \PDO;
use \PDOException;
请注意,PHPStorm 可以在光标位于警告上方时按 alt+enter 自动导入 classes。
@yann-chabot(已删除)的回答是正确的,如果您在 class 之前添加 \
,它会起作用,但他不清楚为什么。
在PHP中,反斜杠用于确定命名空间,PDO class在根命名空间中。
如果您与另一个class处于同一个命名空间,则使用时无需指定命名空间。否则,您应该指定命名空间。
将命名空间视为文件夹的一种简单方式。
有关详细信息,请参阅 PHP manual。
我认为你已经得出结论 PHPStorm 告诉你的是错误的,但实际上你需要学习 how namespaces in PHP work。
- 向 class 名称添加前导反斜杠是引用其绝对命名空间路径的一种方式。
- 在这种情况下,PDO classes 位于根命名空间中,因此它们只是
\PDO
等;如果它们位于名为Acme\Widgets
的命名空间中,您可以将\Acme\Widgets\PDO
写为完全限定的 class 名称。 - 如果您正在编写的文件本身在特定命名空间中声明代码,那么像这样完全限定名称是必要的;也就是说,如果文件顶部有
namespace
关键字。在这种情况下,裸名PDO
被假定为 class 在您正在编写代码的同一名称空间中 。如果您的文件以namespace ZOulhadj\DB
开头,那么new PDO
将被展开,就好像您写的是new ZOulhadj\DB\PDO
. - 如果是这样的话,不只是PHPStorm找不到class——PHP本身也会找不到[=34] =]. PHPStorm 向您指出一个错误,因此您可以在 运行 代码之前修复它。