Методы класса выполняются как static почему? Столкнулся с удивительной проблемой. Есть класс, в котором есть пару методов.
Примерclass Response {
public function execute() {
return 'thing';
}
}
в другом месте удалось вызвать его вот такResponse::execute()
А вот Response->execute() не работает, выдает ошибку.
Создаю $r = new Response, такие же траблы.
Вот так еще оба работаютecho Response::execute();
echo "\n";
# thing
$r = new Response;
echo $r->execute();
# thing
Что это за чертовщина

21 Авг 2019 в 06:59
168 +1
0
Ответы
1

Методы класса, которые вызываются через оператор "::" (например, Response::execute()), являются статическими методами. Статические методы вызываются на уровне класса, а не на уровне экземпляра объекта, и они не имеют доступа к свойствам и методам экземпляра объекта.

Поэтому, когда вы вызываете метод execute() через оператор "::", он выполняется как статический метод и работает корректно.

Когда же вы пытаетесь вызвать метод execute() через оператор "->" (например, $r->execute()), это означает, что вы пытаетесь вызвать метод на уровне экземпляра объекта Response. Так как метод execute() не является статическим методом и не зависит от конкретного экземпляра объекта, вы получаете ошибку.

Для вызова метода execute() через объект Response, нужно изменить метод на статический:public static function execute() {
return 'thing';
}

Тогда оба способа вызова метода будут работать корректно.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 913 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир