php提供實(shí)現(xiàn)反射的方法和實(shí)例代碼
就算是類成員定義為private也可以在外部訪問(wèn),不用創(chuàng)建類的實(shí)例也可以訪問(wèn)類的成員和方法。
PHP自5.0版本以后添加了反射機(jī)制,它提供了一套強(qiáng)大的反射API,允許你在PHP運(yùn)行環(huán)境中,訪問(wèn)和使用類、方法、屬性、參數(shù)和注釋等,其功能十分強(qiáng)大,經(jīng)常用于高擴(kuò)展的PHP框架,自動(dòng)加載插件,自動(dòng)生成文檔,甚至可以用來(lái)擴(kuò)展PHP語(yǔ)言
由于它是PHP內(nèi)建的oop擴(kuò)展,為語(yǔ)言本身自帶的特性,所以不需要額外添加擴(kuò)展或者配置就可以使用。
PHP反射API會(huì)基于類,方法,屬性,參數(shù)等維護(hù)相應(yīng)的反射類,已提供相應(yīng)的調(diào)用API。
訪問(wèn)
假設(shè)定義了一個(gè)類 User,我們首先需要建立這個(gè)類的反射類實(shí)例,然后基于這個(gè)實(shí)例可以訪問(wèn) User 中的屬性或者方法。不管類中定義的成員權(quán)限聲明是否為public,都可以獲取到。
<?php namespace Extend; use ReflectionClass; use Exception; /** * 用戶相關(guān)類 * 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; } /** * 設(shè)置用戶名 * @param string $username */ public function setUsername($username) { $this->username = $username; } /** * 獲取密碼 * @return string */ private function getPassword() { return $this->password; } /** * 設(shè)置密碼 * @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類中g(shù)etUsername方法的注釋文檔
注意:創(chuàng)建反射類時(shí)傳送的類名,必須包含完整的命名空間,即使使用了 use 關(guān)鍵字。否則找不到類名會(huì)拋出異常。
以上就是php提供了什么來(lái)實(shí)現(xiàn)反射的詳細(xì)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
- PHP的反射動(dòng)態(tài)獲取類方法、屬性、參數(shù)操作示例
- php面試實(shí)現(xiàn)反射注入的詳細(xì)方法
- PHP反射原理與用法深入分析
- PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析
- php反射學(xué)習(xí)之不用new方法實(shí)例化類操作示例
- PHP反射學(xué)習(xí)入門示例
- PHP反射實(shí)際應(yīng)用示例
- 用PHP的反射實(shí)現(xiàn)委托模式的講解
- 淺析PHP類的反射來(lái)實(shí)現(xiàn)依賴注入過(guò)程
- PHP基于反射機(jī)制實(shí)現(xiàn)自動(dòng)依賴注入的方法詳解
- PHP基于反射獲取一個(gè)類中所有的方法
- PHP反射基礎(chǔ)知識(shí)回顧
相關(guān)文章
PHP動(dòng)態(tài)編譯出現(xiàn)Cannot find autoconf的解決方法
這篇文章主要介紹了PHP動(dòng)態(tài)編譯出現(xiàn)Cannot find autoconf的解決方法,是PHP程序設(shè)計(jì)中經(jīng)常會(huì)遇到的問(wèn)題,需要的朋友可以參考下2014-11-11php實(shí)現(xiàn)微信公眾平臺(tái)賬號(hào)自定義菜單類
這篇文章主要介紹了php實(shí)現(xiàn)微信公眾平臺(tái)賬號(hào)自定義菜單類的相關(guān)資料,需要的朋友可以參考下2015-10-10php 注冊(cè)時(shí)輸入信息驗(yàn)證器的實(shí)現(xiàn)詳解
本篇文章是對(duì)php中注冊(cè)時(shí)輸入信息驗(yàn)證器的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07PHP實(shí)現(xiàn)的用戶注冊(cè)表單驗(yàn)證功能簡(jiǎn)單示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的用戶注冊(cè)表單驗(yàn)證功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了php form表單提交、數(shù)據(jù)庫(kù)查詢、正則驗(yàn)證等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02PHP讀取XML文件的方法實(shí)例總結(jié)【DOMDocument及simplexml方法】
這篇文章主要介紹了PHP讀取XML文件的方法,結(jié)合實(shí)例形式總結(jié)分析了php基于DOMDocument及simplexml方法針對(duì)xml文件的載入、讀取等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09