Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP名称空间-实例化新对象或直接调用函数?_Php - Fatal编程技术网

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

PHP名称空间-实例化新对象或直接调用函数?,php,Php,我对PHP非常陌生,我正在尝试将名称空间学习到一个合理的水平 我发现我可以通过执行以下操作来使用另一个类中的函数: 使用Sonic\querys\projects; $test=新项目(); $project=$test->getSingleProject($projectd); 但是,我也可以通过简单地执行以下操作来访问该功能: $project=Sonic\querys\projects::getSingleProject($projectd); 使用哪种方法最好?为什么?或者它们本质上

我对PHP非常陌生,我正在尝试将名称空间学习到一个合理的水平

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

使用Sonic\querys\projects;
$test=新项目();
$project=$test->getSingleProject($projectd);
但是,我也可以通过简单地执行以下操作来访问该功能:

$project=Sonic\querys\projects::getSingleProject($projectd);
使用哪种方法最好?为什么?或者它们本质上是一样的?我到处寻找答案,但没有成功。希望有人能给我解释一下。

他们不一样。使用
::
符号静态调用该方法,这意味着该方法无法访问任何类实例变量(如
$this->projectname
)。如果该方法没有使用实例变量,那么很可能应该首先将其定义为静态方法

class projects {
  public static getSingleProject($projectid) {
    // function body
  }
}
它们不一样。使用
::
符号静态调用该方法,这意味着该方法无法访问任何类实例变量(如
$this->projectname
)。如果该方法没有使用实例变量,那么很可能应该首先将其定义为静态方法

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

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

调用
projects::getSingleProject($projectd)
即使它没有声明为
static
在php中仍然有效。如果该方法使用
$this
,您将得到一个错误,但在您的情况下,看起来就是这样。它可能不是声明为静态的,因此您不应该静态地使用它。

我当然建议您坚持第一种方法。静态函数和变量引入了一种全局状态

您可能会从以下资料中受益:


    • 我当然会建议您坚持第一条道路。静态函数和变量引入了一种全局状态

      您可能会从以下资料中受益:


      啊,我明白了。就两者之间的区别而言,如果以这种方式调用静态方法,它的开销是否会减少?假设它不需要任何实例变量?@gordyr从技术上讲,如果不创建实例,您将节省一点点内存。但这并不是静态调用的理由。啊,我明白了。就两者之间的区别而言,如果以这种方式调用静态方法,它的开销是否会减少?假设它不需要任何实例变量?@gordyr从技术上讲,如果不创建实例,您将节省一点点内存。但这并不是静态调用的真正原因。