PHP5 - инициация класса через строку - 2 разных способа

0

Когда я изучаю работу 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
    Нет никакой разницы. И это не ООП. # 1 в реальной жизни может использоваться в плохо спроектированной системе, когда кто-то использует переменную для хранения имени класса + статический метод вместо полиморфизма.
  • 0
    Почему это не ООП? Разве использование класса не является частью инкапсуляции (которая является одной из характеристик ООП)?
Показать ещё 1 комментарий
Теги:
class
string
oop
static

1 ответ

0
Лучший ответ

Разница в версии. До PHP5.3 вы не можете использовать статические методы с переменной.

Кроме того, второй "скрывает" использование класса. Ваша среда IDE не могла найти использование класса.

Также вы можете использовать объект для вызова статических методов.

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

  • 0
    Вы имеете в виду, что 1-й скрыт? Поскольку, используя Netbeans 8, я могу найти метод, используя # 2, но не # 1.
  • 0
    @AlexanderK. Да, первый. Пропущенный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню