2015-12-30 5 views
0

Там в следующее (пример) Класс:PHP: Динамически вызов метода по умолчанию

class klasse 
{ 
    private $var = 'doit'; 

    function doit($param) 
    { 
     return md5($param); 
    } 
    function bla($param) 
    { 
     // HERES THE PROBLEM 
     return $this->{$this->var}($param); 
    } 
} 

// Create new instance 
$klasse = new klasse; 

// Start the "dynamical output" 
echo $klasse->bla('test'); 

Это прекрасно работает! Но проблема в том, что я бы назвал функцию md5() «динамически динамически». Поэтому я не хочу идти в обход с помощью doit(). Если я пытаюсь

private $var = 'md5'; 

в начале класса я получаю следующее (абсолютно senseful) сообщение об ошибке:

Fatal error: Call to undefined method klasse::md5() in - on line 13

Так что я знаю, что эта ошибка senseful, но я не имею понятия, как к избегай это?

Как я могу справиться с этим (для прямого вызова md5())?

Спасибо!

+0

Почему вы должны сделать это? В любом случае, как насчет чего-то типа: '$ func = 'md5'; $ func();' Помните, что 'md5() 'не является методом' klass'. – grimmdude

+0

Becaues есть API, где я могу установить хэш-алгоритм как параметр (на самом деле это sha1, а не md5, это только для целей тестирования). Ваше предложение работает не в классе. Это моя проблема. Ваше редактирование очень важно - конечно, это не метод klasse. Как я могу это назвать? – alve89

+0

возможно, 'if method_exist ($ this, method_name)? $ this-> method_name() else do_nth' ?? – Andrew

ответ

0

Это должно работать:

class klasse 
{ 
    public function __construct() { 
     $this->var = 'md5'; 
    } 


} 

$klasse = new klasse; 
echo call_user_func($klasse->var, 'argument'); 

Больше информации на: http://php.net/manual/en/function.call-user-func.php

+0

Спасибо, я знаю эту функцию. Но я думал, что без него. Если у кого-то нет другого решения, мне нужно это использовать. Спасибо, в любом случае! – alve89

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