php静态函数

时间:2009-05-24 02:11:18

标签: php class static member

我对php中的静态函数有疑问。

让我们假设我有一个班级

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

如果我test::sayHi();它可以毫无问题地工作。

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

test::sayHi();也适用。

头等舱和第二等舱有什么区别?

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

6 个答案:

答案 0 :(得分:144)

在第一个类中,sayHi()实际上是一个实例方法,您将其作为静态方法调用,因为sayHi()从不引用$this,所以您可以使用它。

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

答案 1 :(得分:22)

简单地说,静态函数的功能独立于它们所属的类。

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

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'

答案 2 :(得分:20)

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

简而言之,在第二种情况下,你没有像$ this这样的对象 static方法是类的函数/方法而不是对象实例。

答案 5 :(得分:1)

在尝试了示例(PHP 5.3.5)后,我发现在定义函数的两种情况下,都不能使用$this运算符来处理类函数。所以我找不到他们的差别。 :(