PHP - вызов метода экземпляра из статического метода - PullRequest
0 голосов
/ 15 октября 2011

У меня проблемы с вызовом определенного метода из другого класса в моем приложении.У меня есть класс Rest, который определяет различные настройки и т. Д. Для конкретного запроса, полученного сервером, и создает объект Rest со свойствами запроса.Класс Rest может затем вызвать любой данный метод в отдельном классе для выполнения запроса.Проблема заключается в том, что другому классу необходимо вызывать методы класса Rest для отправки ответа и т. Д.

Как это возможно?Вот схема моей текущей настройки:

class Rest {
    public $controller = null;
    public $method = null;
    public $accept = null;

    public function __construct() {
        // Determine the type of request, etc. and set properties
        $this->controller = "Users";
        $this->method = "index";
        $this->accept = "json";

        // Load the requested controller
        $obj = new $this->controller;
        call_user_func(array($obj, $this->method));
    }

    public function send_response($response) {
        if ( $this->accept == "json" ) {
            echo json_encode($response);
        }
    }
}

Класс контроллера:

class Users {
    public static function index() {
        // Do stuff
        Rest::send_response($response_data);
    }
}

Это приводит к фатальной ошибке в методе send_response: использование $ this, когда не в контексте объекта

Какой лучший способ сделать это, не жертвуя текущим рабочим процессом.

Ответы [ 3 ]

3 голосов
/ 15 октября 2011

Вы можете создать Rest экземпляр в User:

public static function index() {
    // Do stuff
    $rest = new Rest;
    $rest::send_response($response_data);
}

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

1 голос
/ 15 октября 2011

Сначала вам нужно создать экземпляр.

class Users {
    public static function index() {
        // Do stuff
        $rest = new Rest();
        $rest->send_response($response_data);
    }
}
0 голосов
/ 15 октября 2011

Вы не вызываете send_response () в контексте объекта, как говорится в сообщении об ошибке.

Либо вы создаете экземпляр и вызываете все в этом экземпляре (ИМХО правильный путь), либо вы все делаете статически, включая конструктор (вы можете вместо этого использовать метод инициализации) и свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...