婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP反射機制案例講解

PHP反射機制案例講解

熱門標簽:滄州電銷外呼系統價格 上海400客服電話怎么申請 凱立德地鐵站地圖標注 溫州外呼系統招商 天津電銷外呼系統違法嗎 銀行信貸電話機器人 手機外呼系統什么原理 400電話個人能不能辦理 合肥ai電銷機器人費用

簡介

就算是類成員定義為private也可以在外部訪問,不用創建類的實例也可以訪問類的成員和方法。

PHP自5.0版本以后添加了反射機制,它提供了一套強大的反射API,允許你在PHP運行環境中,訪問和使用類、方法、屬性、參數和注釋等,其功能十分強大,經常用于高擴展的PHP框架,自動加載插件,自動生成文檔,甚至可以用來擴展PHP語言。由于它是PHP內建的oop擴展,為語言本身自帶的特性,所以不需要額外添加擴展或者配置就可以使用。更多內容見官方文檔。

反射類型

PHP反射API會基于類,方法,屬性,參數等維護相應的反射類,已提供相應的調用API。

類型 說明
Reflector Reflector 是一個接口,被所有可導出的反射類所實現(implement)
Reflection 反射(reflection)類
ReflectionClass 報告了一個類的有關信息
ReflectionZendExtension 報告Zend擴展的相關信息
ReflectionExtension 報告了PHP擴展的有關信息
ReflectionFunction 報告了一個函數的有關信息
ReflectionFunctionAbstract ReflectionFunction 的父類
ReflectionMethod 報告了一個方法的有關信息
ReflectionObject 報告了一個對象(object)的相關信息
ReflectionParameter 取回了函數或方法參數的相關信息
ReflectionProperty 報告了類的屬性的相關信息

訪問

假設定義了一個類 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作為參數,即可建立User類的反射類
$properties = $class->getProperties();  // 獲取User類的所有屬性,返回ReflectionProperty的數組
$property = $class->getProperty('password'); // 獲取User類的password屬性ReflectionProperty
$methods = $class->getMethods();   // 獲取User類的所有方法,返回ReflectionMethod數組
$method = $class->getMethod('getUsername');  // 獲取User類的getUsername方法的ReflectionMethod
$constants = $class->getConstants();   // 獲取所有常量,返回常量定義數組
$constant = $class->getConstant('ROLE');   // 獲取ROLE常量
$namespace = $class->getNamespaceName();  // 獲取類的命名空間
$comment_class = $class->getDocComment();  // 獲取User類的注釋文檔,即定義在類之前的注釋
$comment_method = $class->getMethod('getUsername')->getDocComment();  // 獲取User類中getUsername方法的注釋文檔

注意:創建反射類時傳送的類名,必須包含完整的命名空間,即使使用了 use 關鍵字。否則找不到類名會拋出異常。

交互

一旦創建了反射類的實例,我們不僅可以通過反射類訪問原來類的方法和屬性,還能創建原來類的實例或則直接調用類里面的方法。

$class = new ReflectionClass('Extend\User');  // 將類名User作為參數,即可建立User類的反射類
$instance = $class->newInstance('youyou', 1, '***');  // 創建User類的實例

$instance->setUsername('youyou_2');  // 調用User類的實例調用setUsername方法設置用戶名
$value = $instance->getUsername();   // 用過User類的實例調用getUsername方法獲取用戶名
echo $value;echo "\n";   // 輸出 youyou_2

$class->getProperty('username')->setValue($instance, 'youyou_3');  // 通過反射類ReflectionProperty設置指定實例的username屬性值
$value = $class->getProperty('username')->getValue($instance);  // 通過反射類ReflectionProperty獲取username的屬性值
echo $value;echo "\n";   // 輸出 youyou_3

$class->getMethod('setUsername')->invoke($instance, 'youyou_4'); // 通過反射類ReflectionMethod調用指定實例的方法,并且傳送參數
$value = $class->getMethod('getUsername')->invoke($instance);    // 通過反射類ReflectionMethod調用指定實例的方法
echo $value;echo "\n";   // 輸出 youyou_4

try {
    $property = $class->getProperty('password_1');
    $property->setAccessible(true);   // 修改 $property 對象的可訪問性
    $property->setValue($instance, 'password_2');  // 可以執行
    $value = $property->getValue($instance);     // 可以執行
    echo $value;echo "\n";   // 輸出 password_2
    $class->getProperty('password')->setAccessible(true);    // 修改臨時ReflectionProperty對象的可訪問性
    $class->getProperty('password')->setValue($instance, 'password');// 不能執行,拋出不能訪問異常
    $value = $class->getProperty('password')->getValue($instance);   // 不能執行,拋出不能訪問異常
    $value = $instance->password;   // 不能執行,類本身的屬性沒有被修改,仍然是private
}catch(Exception $e){echo $e;}

注意事項

  1. 直接訪問 protected 或則 private 的熟悉或者方法會拋出異常
  2. 需要調用指定的 ReflectionProperty 或則 ReflectionMethod 對象 setAccessible(true)方法才能訪問非公有成員
  3. 修改非公有成員的訪問權限只作用于當前的反射類的實例
  4. 需要注意獲取靜態成員和非靜態成員所使用的方法不一樣
  5. 獲取父類成員的方法和一般的不一樣

有時間會整理出反射類的API表,詳細的API列表可以先查閱官方文檔。

到此這篇關于PHP反射機制案例講解的文章就介紹到這了,更多相關PHP反射機制內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決Laravel5.x的php artisan migrate數據庫遷移創建操作報錯SQLSTATE[42000]
  • laravel執行php artisan migrate報錯的解決方法
  • laravel 5.1下php artisan migrate的使用注意事項總結
  • PHP垃圾回收機制講解
  • php之性能優化案例
  • php artisan命令信息列舉

標簽:七臺河 赤峰 溫州 金華 怒江 白城 酒泉 洛陽

巨人網絡通訊聲明:本文標題《PHP反射機制案例講解》,本文關鍵詞  PHP,反射,機制,案例,講解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP反射機制案例講解》相關的同類信息!
  • 本頁收集關于PHP反射機制案例講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美手机在线视频| 视频在线观看国产精品| 日韩一区在线免费观看| 91在线国内视频| 亚洲精品成人少妇| 色8久久人人97超碰香蕉987| 99久久精品免费看国产免费软件| 精品日韩成人av| 秋霞电影网一区二区| 欧美色爱综合网| 国产精品久久久久久久久免费丝袜| 激情av综合网| 久久久久久久网| 国产精品亚洲一区二区三区妖精| 精品国产免费视频| 麻豆一区二区三| 制服丝袜国产精品| 美国十次了思思久久精品导航| 这里只有精品99re| 日av在线不卡| 日韩亚洲欧美一区二区三区| 蜜桃av一区二区三区| 精品久久久网站| 国产在线不卡一区| 国产人成一区二区三区影院| 成人一级黄色片| 国产精品久久久久影院色老大| av影院午夜一区| 亚洲国产欧美日韩另类综合 | 日韩视频免费观看高清在线视频| 丝袜美腿一区二区三区| 欧美电视剧在线看免费| 精品一区二区影视| 国产精品初高中害羞小美女文| 色婷婷香蕉在线一区二区| 亚洲123区在线观看| 欧美va亚洲va香蕉在线| 国产91精品露脸国语对白| 亚洲精品国产高清久久伦理二区 | 国产传媒一区在线| 中文字幕二三区不卡| bt7086福利一区国产| 99综合电影在线视频| 日本伊人午夜精品| 亚洲精品水蜜桃| 欧美国产成人在线| 欧美国产视频在线| 亚洲精品国产一区二区精华液 | 中文字幕免费在线观看视频一区| 欧美电影免费观看完整版| 久久久久9999亚洲精品| www激情久久| ...av二区三区久久精品| 精品一区二区免费| 欧美色综合久久| 中文字幕+乱码+中文字幕一区| 午夜视频一区二区三区| 91亚洲永久精品| 精品福利一区二区三区| 亚洲一区二区三区精品在线| 国产成人精品一区二| 91精品国产欧美一区二区18 | 337p粉嫩大胆噜噜噜噜噜91av| 国产精品免费aⅴ片在线观看| 亚洲人成精品久久久久| 国产高清视频一区| 欧美日韩精品一二三区| 26uuuu精品一区二区| 亚洲精品精品亚洲| 老司机午夜精品| 在线国产电影不卡| 久久久精品一品道一区| 蜜桃久久av一区| 欧美精品一二三区| 亚洲影视资源网| 风间由美一区二区三区在线观看 | 亚洲男女一区二区三区| 韩国女主播一区| 欧美精品1区2区3区| 日韩电影一二三区| 久久综合五月天婷婷伊人| 国产精品资源在线| 在线播放中文一区| 樱花影视一区二区| 欧美日韩极品在线观看一区| 亚洲欧美另类久久久精品| 欧美日韩一区二区不卡| 一区二区三区不卡视频 | 亚洲永久精品国产| 欧美三级电影一区| 精品中文字幕一区二区| 国产精品电影院| 国产欧美精品一区二区色综合| 最新久久zyz资源站| 久久久久久久av麻豆果冻| 欧美一区三区四区| 欧美精品在欧美一区二区少妇| 9人人澡人人爽人人精品| 国产精品乡下勾搭老头1| 日韩va欧美va亚洲va久久| 亚洲va欧美va天堂v国产综合| 日本欧美加勒比视频| 性做久久久久久久久| 久久国产尿小便嘘嘘尿| 国产精品18久久久久久久网站| 粉嫩av一区二区三区在线播放 | 亚洲精品乱码久久久久久黑人 | 国产美女在线精品| 日日夜夜精品视频免费| 成人app在线观看| 日韩欧美资源站| 亚洲一区日韩精品中文字幕| 久久精品国产精品亚洲精品| 国产成人免费在线视频| 欧美成人女星排名| 国产欧美视频在线观看| 一区二区三区91| 青青草成人在线观看| 91视频精品在这里| 欧美日本视频在线| 欧美不卡在线视频| 一区二区三区免费网站| 男女激情视频一区| 91麻豆精东视频| 2020国产精品久久精品美国| 中文在线一区二区| 午夜视频一区二区三区| 91超碰这里只有精品国产| 欧美精品一区二区三区在线| 中文字幕在线观看一区| 日韩电影一区二区三区| 日本高清无吗v一区| 国产精品成人免费在线| 国产乱码字幕精品高清av| 日韩一区二区三区精品视频| 亚洲香蕉伊在人在线观| 91极品美女在线| 亚洲欧美日韩一区二区三区在线观看| 国产又粗又猛又爽又黄91精品| 日韩一区二区高清| 久久精品久久综合| 久久久精品日韩欧美| 夫妻av一区二区| 国产色爱av资源综合区| 波多野结衣一区二区三区| 亚洲人快播电影网| 在线视频一区二区三| 亚洲欧洲综合另类| 欧美天天综合网| 色先锋久久av资源部| 日韩电影在线免费| 久久理论电影网| 成人黄色综合网站| 亚洲最快最全在线视频| 91精品国产乱码| 国产91综合网| 婷婷开心久久网| 国产欧美日韩精品一区| 99re在线精品| 欧美猛男男办公室激情| 午夜成人免费视频| 精品奇米国产一区二区三区| 国产乱码精品1区2区3区| 亚洲欧美日韩在线| 日韩美女天天操| 色成年激情久久综合| 国产精品自产自拍| 亚洲mv在线观看| 亚洲色图另类专区| 精品国产sm最大网站免费看 | 成人丝袜视频网| 日韩电影在线一区| 成人性生交大片免费看中文 | 国产精品婷婷午夜在线观看| 国产欧美日韩激情| 国产日本欧美一区二区| 久久麻豆一区二区| 精品久久五月天| 国产婷婷色一区二区三区在线| 欧美日本高清视频在线观看| 国产一区二区三区综合| 精品一区二区三区免费播放 | 精品国精品国产尤物美女| 欧美成人一区二区三区片免费| 欧美一区二区三区免费在线看| kk眼镜猥琐国模调教系列一区二区| 国产精品中文有码| 99久免费精品视频在线观看 | 欧美日韩在线三级| 91蜜桃网址入口| 色噜噜狠狠成人中文综合| 成人av网址在线| 99久久久国产精品免费蜜臀| 在线看国产日韩| 欧美本精品男人aⅴ天堂| 国产日韩欧美精品综合| 亚洲一区二区视频在线观看| 日本三级亚洲精品| 国产 日韩 欧美大片| 91精品欧美久久久久久动漫|