1. 程式人生 > >使用PHP的反射Reflection獲取物件資訊

使用PHP的反射Reflection獲取物件資訊


<?php
 
class Person
{
    /**
     * 這裡是對$_allowDynamicAttributes的註釋資訊
     */
    private $_allowDynamicAttributes = false;
 
    /** type=primary_autoincrement */
    protected $id = 0;
     
    /** type=varchar length=255 null */
    protected $name;
     
    /** type=text null */
    protected $biography;
 
    public function getId()
    {
         return $this->id;
    }
 
    public function setId($v)
    {
          $this->id = $v;
    }
 
    public function getName()
    {
        return $this->name;
    }
 
    public function setName($v)
    {
        $this->name = $v;
    }
 
    public function getBiography()
    {
        return $this->biography;
    }
 
    public function setBiography($v)
    {
        $this->biography = $v;
    }
}
 
$class = new ReflectionClass('Person'); //建立Person這個類的反射類
$instance = $class->newInstanceArgs();  //相當於例項化Person類
//var_dump($instance);
//1 獲取屬性(Properties):
echo "<h1>獲取屬性</h1>";
$properties = $class->getProperties();
foreach ($properties as &$property)
{
    echo $property->getName()."<BR>";
}
//預設情況下,ReflectionClass會取所有的屬性,private 和protected的也可以
//如果只想獲取到private屬性,就要額外傳個引數
//可用引數列表:
// $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);
// 可用引數列表
    //ReflectionProperty::IS_STATIC
    //ReflectionProperty::IS_PUBLIC
    //ReflectionProperty::IS_PROVATE
    //ReflectionProperty::IS_PROECTED
//如果要同時獲取public 和private 屬性,就這樣寫:ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED。
 
 
echo "<h1>獲取註釋</h1>";
//獲取註釋
foreach($properties as &$property)
{
    if($property->isProtected())  ////測試該方法是否為protected
    {
        $docblock = $property->getDocComment();
        preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);  
        echo $matches[1]."<BR><BR>";
 
    }
}
 
//獲取類的方法
//獲取方法(methods):通過getMethods()來獲取到類的所有methods
 
//執行類的方法
$instance->setBiography(22);
echo $instance->getBiography(); //執行Person裡面的方法getBiography
 
//或者
$ec = $class->getMethod('setName');
$ec->invoke($instance,'xlc');
 
$ec2 = $class->getMethod('getName');
echo $ec2->invoke($instance);
 
?>

相關推薦

使用PHP反射Reflection獲取物件資訊

<?php   class Person {     /**      * 這裡是對$_allowDynamicAttributes的註釋資訊      */     private $_allowDynamicAttributes = false;       /** type=primary_au

小白學python之獲取物件資訊_學習筆記

本文以廖雪峰的官方網站為參考來學習python的。其學習連結為廖雪峰小白學python教程。 本文是學習到python的獲取物件資訊。參考連結廖雪峰python獲取物件資訊。 使用type() print(type(123)) print(type('str')) print(type(

PHP後臺自動獲取視訊資訊並截圖功能例項

名稱:php自動獲取視訊資訊並截圖 描述:PHP後臺自動獲取視訊資訊並截圖功能例項,包含ffmpeg的安裝步驟。 版本:所有版本 步驟1:確保 shell_exec() 函式是否可用!,php.ini中修改下方禁用函式。 disable_functions = pa

Python獲取物件資訊的函式type()、isinstance()、dir()

type()函式: 使用type()函式可以判斷物件的型別,如果一個變數指向了函式或類,也可以用type判斷。 如: class Student(object): name = 'Student' a = Student() print(type(123)) pr

獲取物件資訊dir()及getattr()、setattr()以及hasattr()

如果要獲得一個物件的所有屬性和方法,可以使用dir()函式,它返回一個包含字串的list,比如,獲得一個str物件的所有屬性和方法: >>> dir('ABC') ['__add__

Python基礎(13):面向物件進階(訪問限制,__slots__,property,獲取物件資訊,類屬性和例項屬性)

一,訪問限制 原因:直接操作物件屬性有兩個缺點:無法保證資料安全性,無法進行引數校驗。 示例: class fruit(object): #定義一個類 def __init__(self,name): #定義屬性name

從零開始學PowerShell(6) 獲取物件資訊

在程式設計世界裡,我們一定聽說過面向物件思維,根據面向物件思維我們可以抽象的把現實世界中每一個事物都看成是一個物件,每個物件都包含自己特有的屬性和方法。 而在PowerShell中任何東西也都是一種物件,我們知道物件含有它的屬性和方法等資訊。當我們在編寫指令碼

Python面向物件程式設計(類和例項 訪問限制 繼承和多型 獲取物件資訊 例項屬性和類屬性)

面向物件程式設計——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把物件作為程式的基本單元,一個物件包含了資料和操作資料的函式。 資料封裝、繼承和多型是面向物件的三大特點 在Python中,所有資料型別都可以視

python類的繼承和多型,獲取物件資訊

繼承 類的繼承機制使得子類可以繼承父類中定義的方法,擁有父類的財產,比如有一個Animal的類作為父類,它有一個eat方法: class Animal(object): def

通過Java反射機制獲取物件、方法和成員變數

先定義一個JavaBean package com.jim.test.Test; public class User { private int id; private String name = "abc"; private Str

Java 通過反射獲取物件的成員變數和其值的例子

/** * @author peter * 2018/9/4 19:04 */ public class Reflect { private String name; private int age; private String

手寫spring二:Java反射獲取類和物件資訊全解析

反射在這裡的作用就是知道全路徑 在框架啟動的時候把類例項化 然後設定到@service 和@Autowired裡面 所以要了解這東西怎麼用的 1. 什麼是類物件 類物件,就是用於描述這種類,都有什麼屬性,什麼方法的 2. 獲取類物件 獲取類物件有3種方式 (1). Class.f

Java反射獲取類和物件資訊全解析

反射可以解決在編譯時無法預知物件和類是屬於那個類的,要根據程式執行時的資訊才能知道該物件和類的資訊的問題。 在兩個人協作開發時,你只要知道對方的類名就可以進行初步的開發了。 獲取類物件 Class.forName(String clazzName)靜

反射獲取物件例項的欄位資訊和欄位值

package bea.com.util; import java.lang.reflect.Field; public class reflectUtil { /** * 反射輸出欄位型別的值 * @param obj

反射獲取物件中屬性的資訊,包括屬性的特性

/********************************************/ 反射獲取物件的屬性資訊 Type T = obj.GetType();//其中obj為一個類的物

java反射機制——獲取位元組碼對應類的物件

package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import cn.itcast.bean.demo

php-MediaInfo 獲取媒體資訊

php獲取視訊時長?獲取音軌資訊?獲取媒體檔案的詳細資訊? php-mediainfo瞭解一下 準備工作 個人部落格地址為:dangbowen.com,歡迎加入收藏夾 本機或者伺服器必須有medainfo linux $ sudo apt-get install mediainfo 複製程式碼

Java基礎之反射應用(如何獲取物件的構造方法、屬性以及、基本方法)

反射實戰:新建Student類,利用反射原理輸出Student的構造方法,屬性,普通方法,引數列表等等資訊。 反射資料:查詢java_API之:java.lang.reflect包下。 Student類: package com.briup.ch24; public class St

獲取物件資訊

1.type() 程式碼演示: import types,os #1.type() #1.1獲取型別 print(type("123")) print(type(23)) print(type(True)) print(type(None)) #注意:type返回的是對應的Class型別 pri

PHP 微信網頁授權獲取使用者資訊

  class WxController extends Controller {     //put your code here     /**      * 微信授權相關介面