2012-03-08 4 views
3

Я пытаюсь проверить, существует ли функция или нет, но я получаю ложным в моем случаеfunction_exists возвращает ложь каждый раз

Я пытаюсь вызвать функцию, как это, где $ функции является именем функции :

if (function_exists($this->module->$function)) 
{ 
    $this->module->$function($vars); 
} 
else 
{ 
    echo 'no'; 
} 

переменная module определяется как класс, где функция должна быть вызвана:

$this->module = $module; 
$this->module = new $this -> module; 

Я что-то упустил? Спасибо!

ответ

3

Просто мог понять: Использование method_exists() решена моя проблема

method_exists($this->module,$function) 

Я ответил на этот вопрос сам по себе для людей, которые могут иметь такую ​​же проблему!

2

Вы должны использовать method_exists():

if (method_exists($this->module, $function)) { 
    // do stuff 
} 
2

Вам нужно проверить, существует ли метод, а не функцию:

if (method_exists($this->module, $function)) 
{ 
    $this->module->$function($vars); 
} 
else 
{ 
    echo 'no'; 
} 

взглянуть на документацию: http://php.net/manual/en/function.method-exists.php

2

function_exists принимает имя функции как строки и не имеет понятия иерархии классов.

Если $function это имя функции, просто используйте этот код:

if(function_exists($function)) { 
    // Call $function(). 
} 

Однако, глядя на ваш код это выглядит более, как вы хотите, чтобы обнаружить, если метод объекта существует.

method_exists принимает два параметра, 1: объект для тестирования, 2: имя метода для обнаружения.

if(method_exists($this->module, $function)) { 
    $this->module->$function($vars); 
} 
1

Функция_exists() ожидает параметр String as. Это будет делать трюк:

method_exists($this->module, $function); 

Удачи вам!

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