Проблема с публичной переменной - PullRequest
2 голосов
/ 30 декабря 2011

У меня есть функция, которая разрешает доступ к чему-то, чего я никогда не видел раньше, к переменной функции.

нормальная функциональность:

$api = api_client($special_data);
$data = $api('get','something.json'); // notice $api() not a mistake

Проблема в этом примере выше в том, что ясоздание переменной $ api в каждой функции / методе моего контроллера.Я хотел бы сделать что-то вроде этого:

public $api;

public function somepage(){
  $special_data = get_special_data_from_this_method();
  $this->api = api_client($special_data);
}

public function anotherpage(){
  $data = $this->api('get','something.json'); // api is not a function it is a variable function
}

Я обнаружил, что следующие работы, хотя я не удовлетворен этим

public function somepage(){
  $special_data = get_special_data_from_this_method();
  $this->api = api_client($special_data);
  $temp = $this->api;
  $data = $temp('GET', '/admin/orders.json');
}

Надеюсь, что это имеет смысл будет любить помощь!

1 Ответ

0 голосов
/ 30 декабря 2011

Вы можете использовать call_user_func для вызова этого обратного вызова / замыкания без предварительного сохранения во временную переменную:

call_user_func($this->api, $arg1, $arg2);

Вот полный пример:

class Foo {
    public function __construct() {
        // this is likely what "api_client" is returning (a closure)
        $this->api = function ($arg1, $arg2) {
            print "I was called with $arg1 and $arg2";
        };
    }

    public function call_api($arg1, $arg2) {
        return call_user_func($this->api, $arg1, $arg2);
    }
}

$f = new Foo();
$f->call_api('foo', 'bar');

Или, если использовать ваш пример:

public function somepage(){
    call_user_func($this->api, 'GET', '/admin/orders.json');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...