所以,这是我项目中的一些代码。最近开始使用PDO方法连接到数据库等。问题是我使用的IDE(PhpStorm)由于某种原因不能找到任何PDO
类。 PhpStorm在单词下方显示一条黄线,并显示“Undefined class PDO”。
奇怪的是,如果我在单词\
之前加PDO
(即\PDO
),那么现在可以找到该类。我知道,通过做一些研究,你可以像use \PDO
那样包括它,但我真的不想这样做。
最后,想提一下,在PhpStorm的外部库中,包含了PDO,这更令人困惑,但希望你们能够帮助我解决这个问题。
编辑 - 回答
好的,经过一些帮助,我能够找出为什么我会遇到这个问题。在这个文件的顶部我有namespace App\DB;
,因为这个Php无法找到PDO
类。因此,实际上将\
放在前面实际上是正确的方法。
非常感谢IMSoP,tete0148,Jim Wright。
答案 0 :(得分:4)
只需在类名前加一个反斜杠,因为PHP标准类位于根名称空间中。
\PDO
\PDOException
或者在文件顶部添加一个use语句。
use \PDO;
use \PDOException;
请注意,当光标超过警告时,PHPStorm可以通过按alt + enter自动导入类。
答案 1 :(得分:1)
@ yann-chabot(已删除)的答案是正确的,如果你在课程之前添加\
但是他不清楚为什么会这样做。
在PHP中,反斜杠用于确定命名空间,PDO类位于根命名空间中。
如果您与另一个类位于同一名称空间中,则在使用它时不需要指定名称空间。否则,您应该指定命名空间。
一种考虑命名空间的简单方法是作为文件夹。
有关详细信息,请参阅PHP manual。
答案 2 :(得分:1)
我认为你已经得出结论,PHPStorm告诉你错误的事情,但实际上你需要学习how namespaces in PHP work。
\PDO
等;如果它们位于名为Acme\Widgets
的命名空间中,您可以将\Acme\Widgets\PDO
写为完全限定的类名。namespace
关键字。在这种情况下,假名PDO
被假定为您在中编写代码的同一名称空间中的类。如果您的文件开始namespace ZOulhadj\DB
,那么new PDO
将会像您编写new ZOulhadj\DB\PDO
一样进行扩展。