php 反射api 效率如何 求解

反射效率不高. .能不用最好不用...
當然, 簡單的應用用下倒也關系不大.

⑵ php反射在哪些場景有哪些作用

反射是在PHP運行狀態中,擴展分析PHP程序,導出或提取出關於類、方法、屬性、參數等的詳細信息,包括注釋。這種動態獲取的信息以及動態調用對象的方法的功能稱為反射API。反射是操縱面向對象范型中元模型的API,其功能十分強大,可幫助我們構建復雜,可擴展的應用。
其用途如:自動載入插件,自動生成文檔,甚至可用來擴充PHP語言。
php反射api由若干類組成,可幫助我們用來訪問程序的元數據或者同相關的注釋交互。藉助反射我們可以獲取諸如類實現了那些方法,創建一個類的實例(不同於用new創建),調用一個方法(也不同於常規調用),傳遞參數,動態調用類的靜態方法。
反射api是php內建的oop技術擴展,包括一些類,異常和介面,綜合使用他們可用來幫助我們分析其它類,介面,方法,屬性,方法和擴展。這些oop擴展被稱為反射。
通過ReflectionClass,我們可以得到Person類的以下信息:

1)常量 Contants
2)屬性 Property Names
3)方法 Method Names靜態
4)屬性 Static Properties
5)命名空間 Namespace
6)Person類是否為final或者abstract

然後就去看了看thinkphp的源碼,對於MVC的實現也有不同的體驗ThinkPHPLibCoreApp.class.php 中的exec方法

if(!preg_match('/^[A-Za-z](w)*$/',$action)){
//非法操作
thrownewReflectionException();
}
//執行當前操作
$method=newReflectionMethod($mole,$action);#查看方法
if($method->isPublic()){
$class=newReflectionClass($mole);#反射控制器
//前置操作
if($class->hasMethod('_before_'.$action)){
$before=$class->getMethod('_before_'.$action);
if($before->isPublic()){
$before->invoke($mole);
}
}
//URL參數綁定檢測
if(C('URL_PARAMS_BIND')&&$method->getNumberOfParameters()>0){
switch($_SERVER['REQUEST_METHOD']){
case'POST':
$vars=$_POST;
break;
case'PUT':
parse_str(file_get_contents('php://input'),$vars);
break;
default:
$vars=$_GET;
}
$params=$method->getParameters();
foreach($paramsas$param){
$name=$param->getName();
if(isset($vars[$name])){
$args[]=$vars[$name];
}elseif($param->isDefaultValueAvailable()){
$args[]=$param->getDefaultValue();
}else{
throw_exception(L('_PARAM_ERROR_').':'.$name);
}
}
$method->invokeArgs($mole,$args);
}else{
$method->invoke($mole);#執行我們需要調用函數
}
//後置操作
if($class->hasMethod('_after_'.$action)){
$after=$class->getMethod('_after_'.$action);
if($after->isPublic()){
$after->invoke($mole);
}
}

⑶ php反射查看有哪些私

PHP 5 具有完整的反射 API,添加了對類、介面、函數、方法和擴展進行反向工程的能力。
下面我們演示一下如何通過反射,來調用執行一個類中的私有方法:


<?php //MyClass這個類中包含了一個名為myFun的私有方法class MyClass { private $tmp = 'hello'; private function myFun() { echo $this->tmp . ' ' . 'world!'; }} //通過類名MyClass進行反射$ref_class = new ReflectionClass('MyClass'); //通過反射類進行實例化$instance = $ref_class->newInstance(); //通過方法名myFun獲取指定方法$method = $ref_class->getmethod('myFun'); //設置可訪問性$method->setAccessible(true); //執行方法$method->invoke($instance);?>

⑷ php反射api問題

Reflection::export(new ReflectionExtension('reflection'));

樓主你寫錯了, 不是:是:: 結尾不是;是;

然後給你解釋這個句子

首先它實例化了一個對象 對象來自類 ReflectionExtension, 參數是'reflection', reflection是一個php的模塊, 而模塊本身就是這個反射功能的核心

ReflectionExtension將它自身所在的 Reflection 模塊作為參數來處理, 而ReflectionExtension對象就是專門用來解析php模塊的

之後外層 Reflection::export()是 Reflection 類的方法, 該方法需要一個已處理過的php反射對象作為參數來解析並輸出內容

這個例子雖然很典型,但是不夠實用, 所以可能不容易理解它在做什麼,我寫個更容易看懂的

class x
{
public $a = 1;
private $b = 2;
protected $c = 3;

public function a(){}
private function b(){}
protected function c(){}
}
$ReflectionClass = new ReflectionClass('x');
Reflection::export($ReflectionClass);

你執行這個可能更好理解它在做什麼

⑸ 如何利用php 來反射API獲取類信息

這個需要自己來寫對應php的api介面。具體看你的需求來寫。然後根據api來調用你需要的信息來執行你的操作。

⑹ php中的反射API有什麼作用,一般用在什麼地方

發射API是PHP中幾種內置的OOP擴展特性之一。它包含一系列的類、異常、借口內,充分使用容它們可以使你方便的分析其他類、借口、方法、屬性、函數、擴展,even插件,其實利用反射API是構建插件式架構的基礎。

⑺ 什麼是PHP的反射機制

也可以叫映射。說直白點,他不僅能克隆到對象,而且可以調用對象的變數甚

至方法,挺強內大的。php API5關於與對象容有解釋,有機會可以看下,類似於

java中的。當然,這種特性,足以證明php與asp還是有很大區別的!

⑻ php的反射api是什麼做什麼的有什麼用用大白話來解釋概括一下吧

控制PHP語言環境本身的各個功能,比如類,介面,函數,擴展,數組...
使程序能更改自身的結構和數據.
一般是中間件用,比如框架用反射,
可以讓下游開發在不改上游源碼的情況下改動框架

⑼ php 反射類和實例化類效率哪個高

實例化類用的更高,反射類在一些模式中用的較多