: Ben ile __ sihirli yöntemini çağırmak ve ben bu bir hata ya da değil emin değilim bazı testler (eski kod yerine) yapıyor
Bir sınıf olduğunu varsayalım Lets:
class Calc {
function __invoke($a,$b){
return $a*$b;
}
}
Aşağıdaki mümkündür ve herhangi bir sorun olmadan çalışıyor:
$c = new Calc;
$k = $c;
echo $k(4,5); //outputs 20
However if I want to have another class to store an instance of that object, this doesn't work:
class Test {
public $k;
function __construct() {
$c = new Calc;
$this->k = $c; //Just to show a similar situation than before
// $this-k = new Calc; produces the same error.
}
}
Bizim gibi onu aramak için çalıştığınızda hata oluşur:
$t = new Test;
echo $t->k(4,5); //Error: Call to undefined method Test::k()
Ben bir "çözüm" class Test (k adında) içinde bir işleve sahip olabileceğini bilmek "ileri" çağrısı call_user_func_array kullanarak ama bu şık değil.
Ben (tasarım amaçlı) ortak bir sınıf içinde bu örneği tutmak ve ... diğer sınıflardan fonksiyonu olarak herhangi bir öneri aramak gerekiyor?
Güncelleme:
(En azından benim amaçlar için) ilginç bir şey buldu:
Biz yerel bir değişkene "sınıf değişkeni" atarsanız çalışır:
$t = new Test;
$m = $t->k;
echo $m(4,5);