PHP5 - 通过字符串启动一个类 - 两种不同的方式

时间:2014-12-10 03:04:25

标签: php string class oop static

当我正在学习PHP OOP如何工作时,我偶然发现了以下困惑。

class Foo {

    static function baz() {
        echo 'works';
    }

}

# 1
$a = 'Foo';
$a::baz();

# 2
Foo::baz();

PHP手册指出,从5.3.0开始,可以通过字符串引用静态类(http://php.net/manual/en/language.oop5.static.php

我不明白的是,#1和#2之间有什么不同?它们在技术上是不是一样的,因为它们都在没有启动类的情况下调用静态函数?在实际情况中可以在哪里使用#1?

1 个答案:

答案 0 :(得分:0)

区别在于版本。在PHP5.3之前,您不能将静态方法与变量一起使用。

另外,第二个'隐藏'使用类。您的IDE无法找到类使用情况。

您也可以使用object来调用静态方法。

class Foo {
    static function baz() {
        echo 'works';
    }
}

eval(
'$a = "Foo";
$a::baz();');

eval(
'$a = new Foo();
$a::baz();');

eval(
'Foo::baz();');

http://3v4l.org/WOK44