在PhpStorm

时间:2017-07-19 17:48:04

标签: php mysql pdo phpstorm intellisense

所以,这是我项目中的一些代码。最近开始使用PDO方法连接到数据库等。问题是我使用的IDE(PhpStorm)由于某种原因不能找到任何PDO类。 PhpStorm在单词下方显示一条黄线,并显示“Undefined class PDO”。

奇怪的是,如果我在单词\之前加PDO(即\PDO),那么现在可以找到该类。我知道,通过做一些研究,你可以像use \PDO那样包括它,但我真的不想这样做。

The issue that I am getting

最后,想提一下,在PhpStorm的外部库中,包含了PDO,这更令人困惑,但希望你们能够帮助我解决这个问题。

PDO files included within PhpStorm

  

编辑 - 回答

好的,经过一些帮助,我能够找出为什么我会遇到这个问题。在这个文件的顶部我有namespace App\DB;,因为这个Php无法找到PDO类。因此,实际上将\放在前面实际上是正确的方法。

非常感谢IMSoP,tete0148,Jim Wright。

3 个答案:

答案 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类位于根命名空间中,因此它们只是\PDO等;如果它们位于名为Acme\Widgets的命名空间中,您可以将\Acme\Widgets\PDO写为完全限定的类名。
  • 如果您正在编写的文件本身在特定命名空间中声明代码,则必须完全限定此名称;也就是说,如果文件顶部有namespace关键字。在这种情况下,假名PDO被假定为您在中编写代码的同一名称空间中的类。如果您的文件开始namespace ZOulhadj\DB,那么new PDO将会像您编写new ZOulhadj\DB\PDO一样进行扩展。
  • 如果是这种情况,那么不仅PHPStorm将无法找到该类 - PHP本身也将无法找到该类。 PHPStorm向您指出了一个错误,因此您可以在运行代码之前修复它。