2011-12-18 30 views
9

Mam zmienną taką jak $string = "blah";Jak mogę utworzyć funkcję dynamicznie?

Jak mogę utworzyć funkcję, która ma wartość zmiennej jako nazwę? Czy to możliwe w PHP?

Jak function $string($args){ ... } lub coś, i móc nazwać jak:

blah($args); 
+0

Szukasz [FUNKCJE Anonymous] (http://php.net/manual/en/functions.anonymous.php)? – Indranil

+6

Okropny pomysł. Co tak naprawdę * starasz się zrobić? –

+0

Nie, nie, potrzebuję, aby nazwisko było dostępne za pomocą tego samego kodu :) – Alex

Odpowiedz

9

To nie brzmi jak wielki wybór projektu, być może warto przemyśleć, ale ...

Jeśli używasz PHP 5.3 można użyć anonimową funkcję.

<?php 
$functionName = "doStuff"; 
$$functionName = function($args) { 
    // Do stuff 
}; 

$args = array(); 
$doStuff($args); 
?> 
+2

Technicznie nie określa to funkcji, lecz zamknięcie.Wypróbuj 'get_defined_functions() ['user']' i 'get_defined_vars()', aby zobaczyć różnicę. – jameshfisher

+0

@jameshfisher PHP "closures" są również znane jako [anonymous *** functions ***] (http://php.net/manual/en/functions.anonymous.php), a słowo kluczowe 'function' jest używane w składnia. Oczywiście, to nie definiuje * nazwanej funkcji *, ale myślę, że wykracza poza pedanterię do punktu nierozsądności, mówiąc, że w ogóle nie definiuje "funkcji". –

+0

@MarkAmery PHP "funkcje" i "vars" leżą w różnych przestrzeniach nazw. Są zasadniczo różne. Jest to kwestia semantyczna, a nie składniowa. – jameshfisher

10

to może nie być dobrym pomysłem, ale można zrobić coś takiego:

$string = "blah"; 
$args = "args" 
$string = 'function ' . $string . "({$args}) { ... }"; 
eval($string); 
+11

Nie! Po prostu nie! :) – PeeHaa

+0

hmm ciekawe, to powinno zadziałać, nie myślałem o tym: D – Alex

+4

To powinna być zaakceptowana odpowiedź. Jest to jedyne rozwiązanie, które definiuje funkcję, a nie zamknięcie. Wypróbuj 'get_defined_functions() ['user']' i 'get_defined_vars()', aby zobaczyć różnicę. – jameshfisher

1

Można zadzwonić funkcja według nazwy zapisana w zmiennej, a także możesz przypisać funkcję do zmiennych i wywołać ją za pomocą zmiennej. Jeśli nie jest to, co chcesz, wyjaśnij więcej.

+2

Ta odpowiedź byłaby świetna jako komentarz :) – PeeHaa

Powiązane problemy