PHP静态函数

我有一个关于在PHP静态function的问题。

让我们假设我有一个class级

class test { public function sayHi() { echo 'hi'; } } 

如果我test::sayHi(); 它工作没有问题。

 class test { public static function sayHi() { echo 'hi'; } } 

test::sayHi(); 也适用。

第一课和第二课有什么区别?

静态函数有什么特别之处?

在第一个类中, sayHi()实际上是一个你正在调用的实例方法,因为sayHi()永远不会引用$this

静态函数与类关联,而不是类的实例。 因此, $this是不可用的静态上下文( $this不是指向任何对象)。

完全不同的是,你没有得到$this静态函数中提供的$this 。 如果你尝试使用$this ,你会得到一个Fatal error: Using $this when not in object context

好吧,还有一个区别:你的第一个例子会产生一个E_STRICT警告。

简单地说,静态函数独立于它所属的类别而运行。

$这意味着,这是这个类的一个对象。 它不适用于静态函数。

 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 'hello' 

因为没有创build对象的实例就可以调用静态方法,所以伪variables$ this在声明为静态的方法内不可用。

无法使用箭头运算符 – >通过对象访问静态属性。

调用非静态方法会静态生成E_STRICT级别的警告。

像任何其他PHP静态variables一样,静态属性只能使用文字或常量初始化; expression式是不允许的。 所以虽然你可以初始化一个静态属性为一个整数或数组(例如),但不能将它初始化为其他variables,函数返回值或对象。

从PHP 5.3.0开始,可以使用variables来引用类。 variables的值不能是关键字(例如self,parent和static)。 PHP.NET

调用非静态方法会静态生成E_STRICT级别的警告。

简而言之,在第二种情况下,您没有将对象作为$ this,因为静态方法是类的函数/方法而不是对象实例。

在尝试使用示例(PHP 5.3.5)之后,我发现在定义函数的两种情况下,您都不能使用$this运算符来处理类函数。 所以我还没有find它们的区别。 🙁