这个问题看似愚蠢,但两者($ this和self)都可以调用静态方法。
但是,正确的方法是什么?
我个人倾向于使用“self”,因为私有静态方法就像一个不使用任何对象状态的实用函数。
$data = self::calcSoldeNextMonths('sl', $data, $toSub);
$data = $this->calcSoldeNextMonths('sl', $data, $toSub);
答案 0 :(得分:3)
我个人更喜欢self::
,因为它会立即告诉我我正在处理静态方法。挖掘代码肯定不会很有趣,我必须不断查找函数声明,以确定此方法的操作方式。
修改强>
请在第一条评论中查看@ Kakawait的链接:When to use self vs this。使用self
(即范围解析)查看第二个最受欢迎的影响答案。
答案 1 :(得分:1)
只能使用 static :: 或 self ::
调用静态方法self :: 表示该类, this-> 表示当前对象。根据定义,静态方法是对象独立的类方法,我更喜欢使用 self ::
答案 2 :(得分:0)
这里有一个简单的示例,可以区分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