Answers:
简而言之,静态函数的功能与其所属的类无关。
$ this表示,这是此类的一个对象。它不适用于静态函数。
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'Hi'
完全不同的是,您没有$this
在静态函数内获得任何信息。如果您尝试使用$this
,将会得到一个Fatal error: Using $this when not in object context
。
好吧,还有另一个区别:E_STRICT
第一个示例会生成警告。
$this
引用当前对象。在静态函数中,没有当前对象。该函数存在于类中,而无需或引用该类的对象实例。
静态调用非静态方法会生成E_STRICT级警告。
简而言之,在第二种情况下,您没有将对象作为$ this,因为静态方法是类的函数/方法,而不是对象实例。