Методы класса выполняются как 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 Что это за чертовщина
Методы класса, которые вызываются через оператор "::" (например, Response::execute()), являются статическими методами. Статические методы вызываются на уровне класса, а не на уровне экземпляра объекта, и они не имеют доступа к свойствам и методам экземпляра объекта.
Поэтому, когда вы вызываете метод execute() через оператор "::", он выполняется как статический метод и работает корректно.
Когда же вы пытаетесь вызвать метод execute() через оператор "->" (например, $r->execute()), это означает, что вы пытаетесь вызвать метод на уровне экземпляра объекта Response. Так как метод execute() не является статическим методом и не зависит от конкретного экземпляра объекта, вы получаете ошибку.
Для вызова метода execute() через объект Response, нужно изменить метод на статический:public static function execute() { return 'thing'; }
Тогда оба способа вызова метода будут работать корректно.
Методы класса, которые вызываются через оператор "::" (например, Response::execute()), являются статическими методами. Статические методы вызываются на уровне класса, а не на уровне экземпляра объекта, и они не имеют доступа к свойствам и методам экземпляра объекта.
Поэтому, когда вы вызываете метод execute() через оператор "::", он выполняется как статический метод и работает корректно.
Когда же вы пытаетесь вызвать метод execute() через оператор "->" (например, $r->execute()), это означает, что вы пытаетесь вызвать метод на уровне экземпляра объекта Response. Так как метод execute() не является статическим методом и не зависит от конкретного экземпляра объекта, вы получаете ошибку.
Для вызова метода execute() через объект Response, нужно изменить метод на статический:public static function execute() {
return 'thing';
}
Тогда оба способа вызова метода будут работать корректно.