2017-07-19 102 views
0

找到所以,这里是一些代码,我在我的项目。最近开始使用PDO方法连接到数据库等。问题是,我使用的IDE(PhpStorm)不能出于某种原因找到任何PDO类。 PhpStorm只在该单词下面显示一条黄线,并说'未定义的类PDO'。PDO类不能在PhpStorm

奇怪的是,如果我在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。

+0

重要的问题:当你真正运行的代码,可以在类中找到? – IMSoP

+0

我会很诚实地说,我一直无法测试这个理论出来呢,还是要建立登记类等等等等 – ZOulhadj

+1

啊哈,原来不是跳跃的结论是PHPStorm这里有毛病,你需要学习关于命名空间; PHPStorm正试图节省您的时间,因为*您的代码中有错误*。 – IMSoP

回答

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正在向你指出一个错误,所以你可以在运行代码之前修复它。
+0

噢,好的,谢谢你帮我清理一下。我使用的命名空间是'namespace App \ DB',类是DBConnect。 – ZOulhadj

+0

@ZOulhadj宾果。所以如果你真的运行了这段代码,你会得到一个错误:'找不到类App \ DB \ PDO',因为这是'新PDO'在这个特定文件中的含义。 – IMSoP

4

类名前只需添加一个反斜杠,因为PHP标准类位于根命名空间。

\PDO 
\PDOException 

或者在您的文件顶部添加一条使用声明。

use \PDO; 
use \PDOException; 

请注意,PHPStorm可以在光标超过警告时按Alt + Enter自动导入类。

+2

这是答案,但他不想写正确的语法(看起来),所以他可能会downvote你太;-) –

+1

罗我没有downvote,但感谢你的努力帮助我:-) – ZOulhadj

+0

如果你只是想警告消失,您可以像我提到的那样解决问题,也可以禁用在项目设置中导致此问题的检查。 – tete0148

1

@ yann-chabot的(删除)答案是正确的,如果您在课前添加\,但他不清楚为什么。

在PHP中,反斜杠用于确定名称空间,而PDO类位于根名称空间中。

如果您与另一个类位于同一名称空间中,则在使用它时不需要指定名称空间。否则,您应该指定命名空间。

考虑命名空间的一种简单方法是为文件夹。

欲了解更多信息,请参阅PHP manual

+0

对我个人而言,我并不介意我是否需要使用名称空间,但是几个月前我正在学习PDO,并且我记得不必使用命名空间或类似以下那样的东西:/ – ZOulhadj

+0

该文件您正在编辑的可能不在根名称空间中,因此未找到PDO。 –

+0

@ZOulhadj这不是PDO需要命名空间,它是*你的代码*。我敢打赌,在文件顶部的某个地方,你有关键字'namespace';那就是你使用命名空间。 – IMSoP