2011-01-31 3 views
0

У меня мало помощников - я хочу, чтобы redclare метод каждого помощника в качестве анонимной функции лямбды.Создание функции лямбда от eval()

Я пытаюсь сделать это, получив методы хелперов, а затем делать функцию Eval, но это не будет работать, им получать ошибки синтаксического анализа ..

Мой текущий код:

  foreach($this->helpers as $helper) 
      { 
       include(master_path . 'helpers/'.$helper.'Helper.php'); 

       $helperClass = new applicationHelper(); 
       $methods = get_class_methods($helperClass); 
       foreach($methods as $method) 
       { 

        eval ("\$$method = function (\$text) { 
         \$helperClass->$method(\$text); 
        }"); 

       } 
      } 

Из-за боязни эффективности - я бы хотел получить лучшее решение, если вы это знаете, спасибо! Спасибо, ребята!

+1

Как этот вопрос отличается от вашего [Перевести класс функции на лямбда-функцию] (http://stackoverflow.com/questions/4836258/translate-class-function-to-lambda-function) – Gordon

+0

Я не прошу вас чтобы дать мне объяснение, как это сделать, потому что я уже сделал, но его багги. во всяком случае, уже получил мой ответ, спасибо – WEBProject

ответ

2

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

foreach($methods as $method) 
{ 
    $$method = function($text) use ($method, $helperClass) { 
     return $helperClass->$method($text); 
    } 
} 

Но до сих пор не знаю, почему вы делаете это.

EDIT PHP 5.3.x требуется -> смотрите здесь Anonymous funcions

0
foreach ($this->helpers as $helper) { 
    include(master_path . 'helpers/'.$helper.'Helper.php'); 

    $helperClass = new applicationHelper(); 
    foreach (get_class_methods($helperClass) as $method) { 
     $$method = function($text) use($helperClass, $method) { 
      $helperClass->$method($text); 
     }; 
    } 
} 

, которые получают избавиться от-х медленного eval.