2011-01-29 2 views
2

Я пытаюсь вытащить что-то вроде этого:Перевести функцию класса для лямбда-функции

class helper { 
    .. some class variables .. 

    public function somehelper ($somevar) 
    { 
      .. some action .. 
    } 
} 

к - $somehelper('somevar!')

я хочу, чтобы это было лямбда-функция без меня объявить новую функцию лямбда. Я хочу, чтобы код создавался автоматически. Я хочу создать эту лямбда-функцию автоматически через основной класс, который будет создан для каждой вспомогательной функции - лямбда-функции с именем функции. Я не хочу его указывать. У меня есть файл шаблона и экземпляр помощника класса. <a href..><?= $makeSeo($url); ?></a> это приведет к публичной функции makeSeo($url) в классе помощников. autmatically.

Спасибо, продвинутый!

+1

Не уверен, что речь идет. вы можете уточнить ? –

+0

* (ссылка) * [Анонимные функции] (http://de2.php.net/manual/en/functions.anonymous.php) – Gordon

ответ

2

Похоже, вы хотите что-то, чтобы создать лямбда дали имя метода? Если предположить, что методы класса «Helper» являются статическими, то, как это будет делать это

function makeHelper($fn) 
{ 
    //note use of PHP5.3 closure syntax 
    $helper = function($param) use ($fn) { 
     return Helper::$fn($param); 
    }; 

    return $helper; 
} 

//create a new lambda 
$foo=makeHelper('somehelper'); 

//call it... 
$foo('Hello world); 
+0

ее прогресс, но нет - я не хочу ее указывать. У меня есть файл шаблона и экземпляр помощника класса. это приведет к - public function makeSeo ($ url) в классе-помощнике. autmatically. – WEBProject

+1

Красивый пример, Пол. Большое использование PHP 5.3! – bogeymin

+1

@WEBProject Я думаю, вам нужно уточнить * почему * вы хотите это сделать. –

1

Я думаю, вы говорите, что хотите, чтобы переменная $somehelper вызывала helper::somehelper вне контекста этого класса.

$somehelper = function($somevar) { 
    return helper::somehelper($somevar); 
}); 

Это предположить, что somehelper предназначен для статической функции (т.е. должен быть помечен как public static function. Если это не так, вы будете иметь, чтобы предоставить более подробную информацию о том, где экземпляр класса приходит.

+0

его начало, но нет - я хочу, чтобы он был лямбда-функцией без моего объявления новая лямбда-функция. Я хочу, чтобы созданный вами код автоматически создавался. – WEBProject

+1

@WEBProject Создан автоматически с помощью чего? – lonesomeday

+0

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

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