Методы класса выполняются как 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
196 +2
0
Ответы
1

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

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

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

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

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

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