CakeFest 2024: The Official CakePHP Conference

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeYöntemi çağırır

Açıklama

public ReflectionMethod::invoke(?object $nesne, mixed ...$bağımsız_değişkenler): mixed

Yansıtılan yöntemi çağırır.

Bağımsız Değişkenler

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.

Dönen Değerler

Yöntemin sonucu döner.

Hatalar/İstisnalar

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.

Örnekler

Ö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

Notlar

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).

Ayrıca Bakınız

add a note

User Contributed Notes 3 notes

up
21
rojaro at gmail dot com
13 years ago
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 ).
up
8
dimitriy at remerov dot ru
11 years ago
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;

?>
up
0
templargrey at wp dot pl
12 years ago
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));
?>
To Top