当我正在学习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?
答案 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();');