2011-12-18 24 views
9

$string = "blah";Dinamik olarak bir işlevi nasıl oluşturabilirim?

Değişken değeri olan bir işlevi nasıl oluşturabilirim? PHP'de bu mümkün mü?

function $string($args){ ... } falan ve benzeri diyoruz edebilmek gibi

: bu iyi bir fikir olmayabilir

blah($args); 
+0

call_user_func_array() sen [Anonim işlevler] arıyorsunuz deneyin (http://php.net/manual/en/functions.anonymous.php)? – Indranil

+6

Korkunç bir fikir. Ne yapmaya çalışıyorsun? –

+0

hayır hayır, aynı koddan yararlanabilmem için isme ihtiyacım var :) – Alex

cevap

9

, bu

... bunu yeniden düşünmek değerinde olabilir ama.

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

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

Teknik olarak, bu bir işlev tanımlamaz, ancak bir kapanış.Farkı görmek için get_defined_functions() ['user'] 've' get_defined_vars() 'ı deneyin. – jameshfisher

+0

@jameshfisher PHP'nin "kapanışları" olarak da bilinir [anonim *** işlevler ***] (http://php.net/manual/en/functions.anonymous.php) ve "function" anahtar sözcüğü kullanılır sözdizimi. Elbette, bu bir * isimlendirilmiş fonksiyonu * tanımlamaz, ama sanırım bu, bir 'işlev' tanımlayamadığını söylemek için akıl almaz bir noktaya kadar akılcı olmanın ötesine geçer. –

+0

@MarkAmery PHP'nin "işlevleri" ve "vars" farklı ad alanlarında uzanır. Temelde farklılar. Bu anlamsal bir meseledir, sözdizimsel değil. – jameshfisher

10

, ancak böyle bir şey yapabilirsiniz:

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

Hayır! Sadece hayır! :) – PeeHaa

+0

hmm ilginç, bu işe yaramadı, ben bunu düşünmemiştim: D – Alex

+4

Bu kabul edilen cevap olmalıdır. Bu, bir işlevi değil, bir kapanışı tanımlayan tek çözümdür. Farkı görmek için get_defined_functions() ['user'] 've' get_defined_vars() 'ı deneyin. – jameshfisher

1

Arayabilirsiniz Bir işlev, bir değişkende saklanır ve ayrıca değişkenlere bir işlev atayabilir ve değişken kullanarak bunu çağırabilirsiniz. İstediğiniz şey değilse, lütfen daha fazlasını açıklayın. Eğer bir anonim işlev kullanabilirsiniz PHP 5.3 kullanıyorsanız büyük bir tasarım seçimi gibi gelmiyor

+2

Bu cevap bir yorum olarak harika olurdu :) – PeeHaa

İlgili konular