2012-05-31 2 views
1

вот пример класса:мы можем псевдоним (сохранить в переменной) метод класса в PHP

public class example 
{ 
    private $foof;   

    public function __construct() 
    { 
      $this->foof = $this->foo; 
    } 

    public function foo($val=0) 
    { 
      // do something... 
    } 
} 

Так в основном, в строителю образца кода, можно назначить метод класса для Переменная?

В конечном счете, я хочу, чтобы у вас был ассоциативный массив со всеми методами класса, наложенными на него ... что возможно в php? (!, Которые вы должны использовать в любом случае)

ответ

5

В PHP5.3 + вы можете просто создать анонимную функцию, которая вызывает ваш метод:

$this->foof = function() { 
    $this->foo(1); 
}; 

Однако, вы не можете назвать его с помощью $this->foof() - вы должны назначить это переменная первого: $foof = $this->foof; $foof();


в старых версиях PHP вы не можете легко сделать это - create_function() не создает замыкание так $this не доступна там.

+0

объяснить больше на первом предложении, пожалуйста ... – dave

+2

http://php.net/call_user_func пример @ Dave 4 – Corbin

+0

мы можем передать параметры в метод класса после того, как он был назначен переменной, а не в анонимной функции? – dave

0

Вам не нужно использовать анонимные функции. Просто используйте Callable pseudo type.

$this->foof = array($this, 'foo'); 
... 
call_user_func($this->foof); 
+0

не вопрос. дело было в том, чтобы иметь возможность псевдонимов методов класса для переменных ... поэтому каждый раз, когда я вызываю эту переменную, она будет фактически ссылкой на этот метод класса ... – dave

+0

ответ правильный. возможно, это не то, что вы хотели, или ваш идеальный ответ, но определенно то, о чем вы просили (что было расплывчато). Он работает одинаково, если вы сохраните его до $ f, а затем вызовите через '$ f (55);' – goat

+0

ya после того, как вы его отредактировали, имеет смысл. Перед редактированием он не ответил на вопрос. – dave

Смежные вопросы