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);
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);
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);
?>
Technicznie nie określa to funkcji, lecz zamknięcie.Wypróbuj 'get_defined_functions() ['user']' i 'get_defined_vars()', aby zobaczyć różnicę. – jameshfisher
@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". –
@MarkAmery PHP "funkcje" i "vars" leżą w różnych przestrzeniach nazw. Są zasadniczo różne. Jest to kwestia semantyczna, a nie składniowa. – jameshfisher
to może nie być dobrym pomysłem, ale można zrobić coś takiego:
$string = "blah";
$args = "args"
$string = 'function ' . $string . "({$args}) { ... }";
eval($string);
Nie! Po prostu nie! :) – PeeHaa
hmm ciekawe, to powinno zadziałać, nie myślałem o tym: D – Alex
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
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.
Ta odpowiedź byłaby świetna jako komentarz :) – PeeHaa
Spróbuj call_user_func_array()
Szukasz [FUNKCJE Anonymous] (http://php.net/manual/en/functions.anonymous.php)? – Indranil
Okropny pomysł. Co tak naprawdę * starasz się zrobić? –
Nie, nie, potrzebuję, aby nazwisko było dostępne za pomocą tego samego kodu :) – Alex