2011-12-30 5 views
2

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

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

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

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

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'); 
} 

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

+0

Вы пробовали? Это работает? –

+0

Да, я пробовал это, и он не работает. $ This-> api() 'рассматривается как функция, ошибка:' Call to undefined method mycontroller :: api() ' – ThomasReggi

+0

Можете ли вы сделать его статическим? 'public static $ api;' Затем вызывается как 'self :: $ api ('get', 'something');' Или они должны быть специфичными для экземпляра? –

ответ

0

Вы можете использовать использовать 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'); 
} 
Смежные вопросы