0

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

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

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

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

3 回答 3

4

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

编辑 请在第一条评论中查看@Kakawait 的链接:何时使用 self 与 thisself使用(即范围解析)查看第二个最受好评的答案。

于 2013-09-20T09:14:38.627 回答
1

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

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

于 2013-09-20T09:17:35.027 回答
0

这是一个简单的例子,可以区分 selfstatic简单的方法来记住它们的不同黑白

self 返回基础对象的基础实例(调用 self 的地方)

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

class BaseClass {

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

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

class BaseClass2{

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

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
于 2013-09-20T09:58:48.800 回答