Когда я изучаю работу 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 можно применить в практическом сценарии?
Разница в версии. До PHP5.3 вы не можете использовать статические методы с переменной.
Кроме того, второй "скрывает" использование класса. Ваша среда IDE не могла найти использование класса.
Также вы можете использовать объект для вызова статических методов.
class Foo {
static function baz() {
echo 'works';
}
}
eval(
'$a = "Foo";
$a::baz();');
eval(
'$a = new Foo();
$a::baz();');
eval(
'Foo::baz();');