PHP通過反射實現物件的成員方法呼叫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
class Food
{ public $name = `apple` ;
} class Person
{ const SEX = `boy` ;
public $name ;
private $age ;
protected $hobbies = [];
public function eat(Food $foodObj , string $waterName ):string
{
return "eatting {$foodObj->name},drinking {$waterName}" ;
}
public function hello()
{
return `Hello world` ;
}
} $instance = ( new ReflectionClass( `Person` ))->newInstance();
$reflectionMethod = new ReflectionMethod( `Person` , `eat` );
//校驗成員方法是否是public,可訪問的 if (! $reflectionMethod ->isPublic()) {
echo `不能訪問Person類的eat方法` . PHP_EOL;
return ;
} //ReflectionParametr物件組成的陣列 $parameters = $reflectionMethod ->getParameters();
if ( empty ( $parameters )) {
echo $reflectionMethod ->invoke( $instance );
} else {
$args = [];
foreach ( $parameters as $parameterObj ) {
if ( $reflectionclass = $parameterObj ->getClass()) {
$className = $reflectionclass ->getName();
$args [] = ( new ReflectionClass( $className ))->newInstance();
} else {
$args [] = `hello` ;
}
}
echo $reflectionMethod ->invoke( $instance , ... $args );
} |
-
實現ReflectionClass物件
-
實現ReflectionMethod物件
-
實現ReflectionParameter物件
-
通過反射實現物件的依賴注入
本文轉自 hgditren 51CTO部落格,原文連結:http://blog.51cto.com/phpme/2053752,如需轉載請自行聯絡原作者
相關文章
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- 反射-通過反射獲取成員變數並使用反射變數
- 反射-通過反射獲取無參無返回值成員方法、帶參帶返回值成員方法並使用反射
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- java反射構建物件和方法的反射呼叫Java反射物件
- 通過反射獲取類的類名,方法和內部成員變數反射變數
- 淺析如何通過PHP類的反射來實現依賴注入PHP反射依賴注入
- java對過反射呼叫方法Java反射
- (C#)利用反射動態呼叫類成員C#反射
- 使用反射-動態建立物件及呼叫物件方法反射物件
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- android實現app通過jni呼叫C/C++方法AndroidAPPC++
- PHP實現多儲存過程呼叫PHP儲存過程
- 如何通過反射(Reflection)+註解(Attribute)來實現陣列轉化為物件反射陣列物件
- PHP 如何通過 JSON-RPC 呼叫實現以太坊互動PHPJSONRPC
- 通過反射獲取私有內部類物件反射物件
- PHP通過傳遞物件引數呼叫asp.netWebservice服務PHP物件ASP.NETWeb
- PHP通過FFI呼叫CJieba分詞PHPJieba分詞
- 反射-通過反射獲取私有構造方法並使用反射構造方法
- golang通過反射使用json字串呼叫struct的指定方法及返回json結果Golang反射JSON字串Struct
- 通過Guava實現兩個包含不同物件的List合併成一個ListGuava物件
- 如何在PHP中實現鏈式方法呼叫PHP
- 反射-通過反射獲取無參構造方法並使用反射構造方法
- 反射-通過反射獲取帶參構造方法並使用反射構造方法
- 反射的妙用:C#通過反射動態生成型別繼承介面並實現反射C#型別繼承
- c# 反射呼叫方法C#反射
- PHP5 SOAP呼叫原理及實現過程PHP
- Python關於反射和類的特殊成員方法詳解Python反射
- javascript物件導向的方法過載的實現JavaScript物件
- 如何在PHP中實現鏈式方法呼叫薦PHP
- 反射-通過反射越過泛型檢查反射泛型
- [bug]spring專案通過反射測試私有方法時,注入物件異常Spring反射物件
- C# 透過反射(Reflection)呼叫不同名泛型方法C#反射泛型
- 用反射呼叫Method類的invoke方法反射
- Vue通過Blob物件實現匯出Excel功能Vue物件Excel
- 透過ASM 反射實現IOCASM反射
- PHP 物件導向 (十一)反射類PHP物件反射
- PHP --反射 --獲取類的方法PHP反射