2013-07-03 15 views
9

Bir çeşit tersine çevrilmiş func_get_args() arıyorum. Fonksiyon tanımlandığında parametrelerin nasıl adlandırıldığını öğrenmek istiyorum. Bunun nedeni ben argümanlar olarak iletilen ayar değişkenleri kullanırken yöntemle kendimi tekrar etmek istemiyorum edilir:PHP'de işlevin parametre adları nasıl alınır?

public function myFunction($paramJohn, $paramJoe, MyObject $paramMyObject) 
{ 
    $this->paramJohn = $paramJohn; 
    $this->paramJoe = $paramJoe; 
    $this->paramMyObject = $paramMyObject; 
} 

İdeal gibi bir şey yapabileceğini:

foreach (func_get_params() as $param) 
    $this->${$param} = ${$param}; 
} 

bu bir overkill mı, Bu aptalca bir fikir mi, yoksa bunun gerçekleşmesi için daha iyi bir yol var mı?

cevap

1

Bunu yapmak imkansız olmasa da, genellikle başka bir yöntem kullanmak daha iyidir. Burada SO üzerinde benzer bir soruya link:

How to get a variable name as a string in PHP?

Ne yapabileceğini yerine teker teker iletmek yerine, bir nesnenin içindeki tüm parametreleri aktarmak olduğunu. Veritabanlarıyla ilgili olarak bunu yaptığınızı varsayarak, ORM'leri okumak isteyebilirsiniz.

18

Sen Reflection kullanabilirsiniz:

Bir sınıfta bu kullandığınız yana
$ref = new ReflectionFunction('myFunction'); 
foreach($ref->getParameters() as $param) { 
    echo $param->name; 
} 

, sen ReflectionFunction yerine ReflectionMethod kullanabilirsiniz:

:

İşte
$ref = new ReflectionMethod('ClassName', 'myFunction'); 

çalışan bir örnektir

class ClassName { 
    public function myFunction($paramJohn, $paramJoe, $paramMyObject) 
    { 
     $ref = new ReflectionMethod($this, 'myFunction'); 
     foreach($ref->getParameters() as $param) { 
      $name = $param->name; 
      $this->$name = $$name; 
     } 
    } 
} 

$o = new ClassName; 
$o->myFunction('John', 'Joe', new stdClass); 
var_dump($o); 

Yukarıdaki yerlerde var_dump()prints:

object(ClassName)#1 (3) { 
    ["paramJohn"]=> 
    string(4) "John" 
    ["paramJoe"]=> 
    string(3) "Joe" 
    ["paramMyObject"]=> 
    object(stdClass)#2 (0) { 
    } 
} 
0
karşılık gelen değerler olarak şifreler ve parametre değerleri olarak parametre adlarını içeren bir dizi oluşturur

Kod pasajı:

$ref = new ReflectionFunction(__FUNCTION__); 

$functionParameters = []; 
foreach($ref->getParameters() as $key => $currentParameter) { 
    $functionParameters[$currentParameter->getName()] = func_get_arg($key); 
} 
İlgili konular