就算是類成員定義為private也可以在外部訪問,不用創(chuàng)建類的實例也可以訪問類的成員和方法。
PHP自5.0版本以后添加了反射機制,它提供了一套強大的反射API,允許你在PHP運行環(huán)境中,訪問和使用類、方法、屬性、參數(shù)和注釋等,其功能十分強大,經(jīng)常用于高擴展的PHP框架,自動加載插件,自動生成文檔,甚至可以用來擴展PHP語言
由于它是PHP內(nèi)建的oop擴展,為語言本身自帶的特性,所以不需要額外添加擴展或者配置就可以使用。
PHP反射API會基于類,方法,屬性,參數(shù)等維護相應的反射類,已提供相應的調用API。
訪問
假設定義了一個類 User,我們首先需要建立這個類的反射類實例,然后基于這個實例可以訪問 User 中的屬性或者方法。不管類中定義的成員權限聲明是否為public,都可以獲取到。
?php
namespace Extend;
use ReflectionClass;
use Exception;
/**
* 用戶相關類
* Class User
* @package Extend
*/
class User{
const ROLE = 'Students';
public $username = '';
private $password = '';
public function __construct($username, $password)
{
$this->username = $username;
$this->password = $password;
}
/**
* 獲取用戶名
* @return string
*/
public function getUsername()
{
return $this->username;
}
/**
* 設置用戶名
* @param string $username
*/
public function setUsername($username)
{
$this->username = $username;
}
/**
* 獲取密碼
* @return string
*/
private function getPassword()
{
return $this->password;
}
/**
* 設置密碼
* @param string $password
*/
private function setPassowrd($password)
{
$this->password = $password;
}
}
$class = new ReflectionClass('Extend\User'); // 將類名User作為參數(shù),即可建立User類的反射類
$properties = $class->getProperties(); // 獲取User類的所有屬性,返回ReflectionProperty的數(shù)組
$property = $class->getProperty('password'); // 獲取User類的password屬性ReflectionProperty
$methods = $class->getMethods(); // 獲取User類的所有方法,返回ReflectionMethod數(shù)組
$method = $class->getMethod('getUsername'); // 獲取User類的getUsername方法的ReflectionMethod
$constants = $class->getConstants(); // 獲取所有常量,返回常量定義數(shù)組
$constant = $class->getConstant('ROLE'); // 獲取ROLE常量
$namespace = $class->getNamespaceName(); // 獲取類的命名空間
$comment_class = $class->getDocComment(); // 獲取User類的注釋文檔,即定義在類之前的注釋
$comment_method = $class->getMethod('getUsername')->getDocComment(); // 獲取User類中getUsername方法的注釋文檔
注意:創(chuàng)建反射類時傳送的類名,必須包含完整的命名空間,即使使用了 use 關鍵字。否則找不到類名會拋出異常。
以上就是php提供了什么來實現(xiàn)反射的詳細內(nèi)容,感謝大家的學習和對腳本之家的支持。
您可能感興趣的文章:- PHP的反射動態(tài)獲取類方法、屬性、參數(shù)操作示例
- php面試實現(xiàn)反射注入的詳細方法
- PHP反射原理與用法深入分析
- PHP進階學習之反射基本概念與用法分析
- php反射學習之不用new方法實例化類操作示例
- PHP反射學習入門示例
- PHP反射實際應用示例
- 用PHP的反射實現(xiàn)委托模式的講解
- 淺析PHP類的反射來實現(xiàn)依賴注入過程
- PHP基于反射機制實現(xiàn)自動依賴注入的方法詳解
- PHP基于反射獲取一個類中所有的方法
- PHP反射基礎知識回顧