我有一个关于php中静态函数的问题。
假设我有一个类
class test {
public function sayHi() {
echo 'hi';
}
}
如果我使用test::sayHi();
,它可以正常工作,没有问题。
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
也能正常工作。
一等舱和二等舱有什么不同?
静态函数有什么特别之处?
发布于 2009-05-24 02:20:03
在第一个类中,sayHi()
实际上是一个实例方法,您将其作为静态方法调用,但由于sayHi()
从未引用过$this
,因此您可以轻松地使用它。
静态函数与类相关联,而不是类的实例。因此,$this
不能从静态上下文中获得($this
没有指向任何对象)。
发布于 2013-08-27 23:36:06
简单地说,静态函数的功能独立于它们所属的类。
$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'
发布于 2009-05-24 02:15:03
完全不同的是,您不会在静态函数中获得$this
。如果你尝试使用$this
,你会得到一个Fatal error: Using $this when not in object context
。
好的,还有一个不同之处:您的第一个示例生成了一个E_STRICT
警告。
https://stackoverflow.com/questions/902909
复制相似问题