这个问题看起来很愚蠢,但是($this 和 self)都可以调用静态方法。
但是,正确的方法是什么?
我个人倾向于使用“self”,因为私有静态方法就像一个不使用任何对象状态的实用函数。
$data = self::calcSoldeNextMonths('sl', $data, $toSub);
$data = $this->calcSoldeNextMonths('sl', $data, $toSub);
我个人更喜欢self::
,因为它立即告诉我我正在处理一个静态方法。挖掘代码肯定不会很有趣,因为我必须不断查找函数声明才能确定该方法在什么上下文中运行。
编辑
请在第一条评论中查看@Kakawait 的链接:何时使用 self 与 this。self
使用(即范围解析)查看第二个最受好评的答案。
静态方法只能用static::或self::调用
self::表示类, this->表示当前对象。根据定义,静态方法是独立于对象的类方法,我更喜欢使用self::
这是一个简单的例子,可以区分 self
和static
简单的方法来记住它们的不同黑白
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