关于php:调用私有静态方法的好方法?

The good way to call a private static method?

本问题已经有最佳答案,请猛点这里访问。

这个问题可能看起来很愚蠢,但是($this和self)都可以调用静态方法。

但是,正确的方法是什么?

我个人倾向于使用"self",因为私有静态方法就像一个不使用任何对象状态的实用函数。

1
2
$data = self::calcSoldeNextMonths('sl', $data, $toSub);
$data = $this->calcSoldeNextMonths('sl', $data, $toSub);


我个人更喜欢self::,因为它立即告诉我我正在处理一个静态方法。当然,在代码中挖掘代码并不是很有趣,我必须不断地查找函数声明,以确定这个方法在什么上下文中运行。

编辑请参见@kakawait的第一条评论链接:何时使用self与this。使用self查看第二个最乐观的答案(即范围解决方案)。


只能使用static::或self:调用静态方法:

self::表示类,this->表示当前对象。根据定义,静态方法是独立于对象的类方法,我更喜欢使用self::


这里有一个简单的例子来区分selfstatic,以及简单的方法来记住不同的b/w。

self返回基对象的基实例(在其中调用self)

static返回对象的当前实例(扩展了任一对象)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class BaseClass {

public function make()
{
    echo __METHOD__,"
"
;
}

public function println()
{
    static::make();
}
}

class BaseClass2{

public function make()
{
    echo __METHOD__,"
"
;
}

public function println()
{
    self::make();
}
}

class StaticClass extends BaseClass{

public function make()
{
    echo __METHOD__;
}
}

 class selfMain extends BaseClass2{
public function make()
{
    echo __METHOD__;
}
 }
$obj = new StaticClass();
$obj->println();//return the current instance of object

$obj = new selfMain();
$obj->println();//return the best instance of object