Ben sihirli farklı nesneler yöntemlerini çağırmak için __call yöntemi kullanan bir nesne var.
Bu yöntem, bir referans olması parametrelerinin birini veya daha fazlasını gerektiren bir yöntem çağırmak için kullanılacak zamanlar vardır.
Php 5.3 çağrı zaman olduğu gibi pass-by-reference yüzden referans argüman ileterek itimat edemez onaylanmaz. Ben argümanlar referans veya değer geçirilecek gerekiyorsa tahmin etmek gerekir!
Ben kodu bu açıklamaya çalışacağız. Ben şu iki sınıf vardır:
- Main_Object
- Extension_Object
note: iki sınıf arasında herhangi bir miras yapısı vardır.
class Main_Object {
public function __call($method, $arguments)
{
// check this method is in an extended class
// …
$ext = new Extension_Object();
// call method in extension object
return call_user_func_array(array($ext, $method), $arguments);
}
}
class Extension_Object {
// takes two arguments
public function foo($p1, $p2)
{
// ...
}
// takes two arguments, the first being a reference
public function bar(&$p1, $p2)
{
// ...
}
}
Şu anda bir PHP hatası veya uyarı oluşturmadan bar () aramak için bir yol bulamıyorum
$obj = new Main_Object();
// works as expected
$obj->foo($bacon, $cheese);
// MESSAGE call-time pass-by-reference has been deprecated
$obj->bar(&$bacon, $cheese);
// WARNING parameter 1 expected to be a reference
$obj->bar($bacon, $cheese);