Срабатывает статический вызов не статического метода, как так? Есть не статические методы - test1 и test2
При их статическом вызове они отрабатывают как статические, в чем подвох?class Test {

public function test(){
echo 'ты меня видишь';
}
public function test2(){
echo 12;
}
}
$d = Test::test1(); // выводит: ты меня видишь
$a = Test::test2(); // выводит: 12

21 Авг 2019 в 07:06
221 +1
0
Ответы
1

Подвох заключается в использовании статического метода для вызова не статического метода. В данном случае, при вызове статического метода test1() или test2(), PHP интерпретирует их как статические методы, хотя они в действительности не объявлены как статические.

Тем не менее, это работает из-за того, что PHP не строгий в этом отношении и позволяет вызывать не статические методы из статического контекста без ошибок. Однако, это считается плохой практикой и не следует полагаться на такое поведение, так как в будущих версиях PHP это может быть изменено.

Для правильного вызова не статического метода из статического контекста, рекомендуется создать экземпляр класса и вызывать методы через этот экземпляр, как показано ниже:

$class = new Test();
$class->test1();
$class->test2();

Таким образом, статический вызов не статического метода не является нормальной практикой и может привести к нежелательным последствиям в дальнейшем.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир