Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).
(PHP 5, PHP 7, PHP 8)
ReflectionMethod::invoke — Yöntemi çağırır
Yansıtılan yöntemi çağırır.
nesne
Yöntemin çağrılacağı nesne. Statik yöntemlerde bu bağımsız değişkene
null
aktarılır.
bağımsız_değişkenler
Yönteme aktarılacak bağımsız değişken listesi. call_user_func() işlevindeki gibi yönteme değişken sayıda bağımsız değişken aktarılabilir.
Yöntemin sonucu döner.
nesne
bağımsız değişkeni bu yöntemin bildirildiği
sınıfın örneğini içermiyorsa bir ReflectionException
yavrulanır.
Yöntem çağrısı başarısız olursa bir ReflectionException yavrulanır.
Örnek 1 - ReflectionMethod::invoke() örneği
<?php
class HelloWorld {
public function sayHelloTo($name) {
return 'Hello ' . $name;
}
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>
Yukarıdaki örneğin çıktısı:
Hello Mike
Bilginize:
Değer döndüren bağımsız değişkenlerin varlığında ReflectionMethod::invoke() kullanılamaz. Yerine ReflectionMethod::invokeArgs() kullanılmalıdır (bağımsız değişken listesinde bunları gönderimli aktararak).
Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).
This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output "A":
<?php
class A
{
public function foo()
{
return __CLASS__;
}
}
class B extends A
{
public function foo()
{
return __CLASS__;
}
}
$b = new B();
$reflection = new ReflectionObject($b);
$parentReflection = $reflection->getParentClass();
$parentFooReflection = $parentReflection->getMethod('foo');
$data = $parentFooReflection->invoke($b);
echo $data;
?>
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".
<?php
class ParentClass { protected static $a = 'a'; static public function init() { return static::$a; } }
class ChildClass extends ParentClass { protected static $a = 'b'; }
$r = new ReflectionClass('ChildClass');
var_dump($r->getMethod('init')->invoke(null));
?>