PHP bir dizi değerine sahip bir yöntemi çağırma

5 Cevap php

Ben böyle bir sınıf var

class someclass{
  public function somemethod(){}
}

Şimdi bir dizi var:

$somearray['someclass']  = new someclass();
$somearray['somemethod'] = 'somemethod';

Onları ateş, nasıl ben şu çalıştı:

$somearray['someclass']->$somearray['somemethod']();

Ben şu hatayı alıyorum bu usign:

Ölümcül hata: Yöntem adı bir dize olmalıdır ......................

Herkes bunu yapmak için nasıl bir fikriniz var mı?

5 Cevap

Ben (sözdizimi doğru olduğunu işaret @ webbiedave gibi) sağlanan kodu ile hata yeniden olamaz.

Ancak yöntem adı bir dize sağlamak için kullanmadan önce bir dizeye yöntem adı döküm olabilir. Bu bile bir __toString() yöntemiyle kullanıcı tanımlı nesne olduğunu sağlayacaktır, kendi dize gösterimine dönüştürülür.

$somearray['someclass']->{(string)$somearray['somemethod']}();

(Ve ben gerektiği katılıyorum) bu şekilde çalışmak istemiyorsa, siz deneyebilirsiniz:

call_user_func(array($somearray['someclass'], $somearray['somemethod']));

Try $somearray['someclass']->{$somearray['somemethod']}();

Aşağıdaki kodu test ve istediğiniz istediğiniz gibi görünüyor edilmiştir:

<?php


class someclass{
  public function somemethod(){ echo 'test'; }
}


$somearray['someclass']  = new someclass();
$somearray['somemethod'] = 'somemethod';

$somearray['someclass']->{$somearray['somemethod']}();

?>

Buna ne dersiniz:

foreach (get_class_methods(get_class(new someclass()) as $method) {
    $method();    
}