PHP命名空间 - 直接实例化新对象或调用函数?

时间:2012-03-21 02:24:36

标签: php

我是PHP的新手,我正在尝试将命名空间学习到合理的水平。

我发现我可以通过执行以下操作来使用其他类中的函数:

use Sonic\queries\projects;

$test = new projects();

$project = $test->getSingleProject($projectid);

但是我也可以通过简单地执行以下操作来访问该功能:

$project = Sonic\queries\projects::getSingleProject($projectid);

哪种方法最好用,为什么?或者它们基本相同?我搜索了高低的答案,但没有成功。希望有人可以向我解释。

3 个答案:

答案 0 :(得分:2)

他们相同。使用::表示法静态调用该方法,这意味着该方法无法访问任何类实例变量(如$this->projectname)。如果该方法没有使用实例变量,那么很可能它应该被定义为静态方法。

class projects {
  public static getSingleProject($projectid) {
    // function body
  }
}

PHP documentation on static methods...

答案 1 :(得分:2)

我肯定会建议你坚持第一种方式。静态函数和变量引入了一种全局状态。

您可以从这里的材料中受益:

答案 2 :(得分:1)

即使未声明projects::getSingleProject($projectid),调用static仍然在php中有效。如果方法使用$this,您将收到错误,但在您的情况下,看起来这就是正在发生的事情。它可能没有声明为静态,因此你不应该静态使用它。