Nasıl dinamik olarak PHP bir sınıf yöntemi çağırabilirsiniz? Sınıf yöntemi statik değildir. Öyle görünüyor ki
call_user_func(...)
Sadece statik fonksiyonları ile çalışır?
Teşekkürler.
Seçenek 1
// invoke an instance method
$instance = new Instance();
$instanceMethod = 'bar';
$instance->$instanceMethod();
// invoke a static method
$class = 'NameOfTheClass';
$staticMethod = 'blah';
$class::$staticMethod();
Seçenek 2
// invoke an instance method
$instance = new Instance();
call_user_func( array( $instance, 'method' ) );
// invoke a static method
$class = 'NameOfTheClass';
call_user_func( array( $class, 'nameOfStaticMethod' ) );
call_user_func( 'NameOfTheClass::nameOfStaticMethod' ); // (As of PHP 5.2.3)
Seçenek 1 is faster than Seçenek 2 so try to use them unless you don't know how many arguments your going to be passing to the method.
Düzenleme: Önceki editör benim cevap temizleme büyük bir iş yaptım ama sonra call_user_func farklı call_user_func_array bahsedilmektedir kaldırıldı.
PHP vardır
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
http://php.net/manual/en/function.call-user-func.php
VE
mixed call_user_func_array ( callable $callback , array $param_arr )
http://php.net/manual/en/function.call-user-func-array.php
Call_user_func_array kullanarak yukarıda listelenen seçeneğini kullanarak yavaş o büyüklükte emir.
call_user_func(array($object, 'methodName'));
Daha fazla ayrıntı için bkz: php callback documentation.
EDIT: Ben sadece iyi ah .. zaten benim yorum bırakacak ... sormaya çalışıyor ne çalıştı. Eğer .. gibi (ama sen delirdin mi) eğer sınıfları ve değişkenleri ile yöntemlerin isimleri yerini alabilir - nick
Bir işlevi çağırmak için bir sınıf içinde bunu iki yoldan birini yapabilirsiniz ...
Either you can create an instance of the class, and then call it. e.g.:
$bla = new Blahh_class();
$bla->do_something();
or... you can call the function statically.. i.e. with no instance of the class. e.g.:
Blahh_class::do_something()
tabii sizin işlevi statik olduğunu beyan etmek gerekiyor:
class Blahh_class {
public static function do_something(){
echo 'I am doing something';
}
}
If a class is not defined as static, then you must create an instance of the object.. (so the object needs a constructor) e.g.:
class Blahh_class {
$some_value;
public function __construct($data) {
$this->$some_value = $data;
}
public function do_something() {
echo $this->some_value;
}
}
Hatırlanması gereken önemli şey sınıfının hiçbir örneği yok gibi statik sınıfı işlevleri $this
kullanamazsınız olmasıdır. (Bu onlar çok daha hızlı gitmek nedenlerinden biridir.)