PHP Conference Japan 2024

ReflectionProperty 類別

(PHP 5, PHP 7, PHP 8)

簡介

ReflectionProperty 類別會回報類別屬性的相關資訊。

類別概要

class ReflectionProperty implements Reflector {
/* 常數 */
public const int IS_STATIC;
public const int IS_READONLY;
public const int IS_PUBLIC;
公開 常數 整數 IS_PROTECTED;
公開 常數 整數 IS_PRIVATE;
公開 常數 整數 IS_ABSTRACT;
公開 常數 整數 IS_PROTECTED_SET;
公開 常數 整數 IS_PRIVATE_SET;
公開 常數 整數 IS_VIRTUAL;
公開 常數 整數 IS_FINAL;
/* 屬性 */
公開 字串 $name;
公開 字串 $class;
/* 方法 */
公開 __construct(物件|字串 $class, 字串 $property)
私有 __clone():
公開 靜態 export(混合 $class, 字串 $name, 布林 $return = ?): 字串
公開 getAttributes(?字串 $name = null, 整數 $flags = 0): 陣列
公開 getName(): 字串
公開 getValue(?物件 $object = null): 混合
公開 hasType(): 布林值
公開 isInitialized(?物件 $object = null): 布林值
公開 isLazy(物件 $object): 布林值
公開 setAccessible(布林值 $accessible):
公開 setValue(物件 $object, 混合 $value):
公開 __toString(): 字串
}

屬性

name

屬性名稱。唯讀,嘗試寫入時會拋出 ReflectionException 例外。

class

定義屬性的類別名稱。唯讀,嘗試寫入時會拋出 ReflectionException 例外。

預定義常數

ReflectionProperty 修飾符

ReflectionProperty::IS_STATIC 整數

表示 靜態 屬性。在 PHP 7.4.0 之前,值為 1

ReflectionProperty::IS_READONLY 整數

表示 唯讀 屬性。從 PHP 8.1.0 開始可用。

ReflectionProperty::IS_PUBLIC 整數

表示 公開 屬性。在 PHP 7.4.0 之前,值為 256

ReflectionProperty::IS_PROTECTED 整數

表示 保護 屬性。在 PHP 7.4.0 之前,值為 512

ReflectionProperty::IS_PRIVATE 整數

表示 私有 屬性。在 PHP 7.4.0 之前,值為 1024

ReflectionProperty::IS_ABSTRACT 整數
表示屬性是 抽象 的。從 PHP 8.4.0 開始可用。
ReflectionProperty::IS_PROTECTED_SET 整數
從 PHP 8.4.0 開始可用。
ReflectionProperty::IS_PRIVATE_SET 整數
從 PHP 8.4.0 開始可用。
ReflectionProperty::IS_VIRTUAL 整數
從 PHP 8.4.0 開始可用。
ReflectionProperty::IS_FINAL 整數
表示屬性是 最終 的。從 PHP 8.4.0 開始可用。

注意事項:

這些常數的值可能會在不同 PHP 版本之間發生變化。建議始終使用常數,而不要直接依賴值。

更新日誌

版本 說明
8.4.0 類別常數現在已設定類型。
8.4.0 新增了 ReflectionProperty::IS_VIRTUALReflectionProperty::IS_PRIVATE_SETReflectionProperty::IS_PROTECTED_SETReflectionProperty::IS_ABSTRACT 以及 ReflectionProperty::IS_FINAL
8.0.0 ReflectionProperty::export() 已移除。

目錄

新增註釋

使用者貢獻的註釋 1 則註釋

rasmus at mindplay dot dk
14 年前
我認為更準確的解釋是這樣的

Reflection 類別的設計是用於反映應用程式的原始碼,而不是任何執行時期資訊。

我認為您在上面的範例中誤解了 ReflectionProperty 建構函式。它接受物件作為參數的事實只是一個便利的功能 - 您實際上是在檢查該物件的類別,而不是物件本身,所以它基本上等同於

<?php

// 運作正常
$Reflection = new ReflectionProperty(get_class($a), 'a');

// 拋出例外
$Reflection = new ReflectionProperty(get_class($a), 'foo');

?>

由於檢查已定義的屬性是這個類別的目的,因此傳入物件的類別是被隱含的。

在你的例子中,$a->foo 是一個動態成員 - 它並未定義為類別的成員,所以沒有定義類別的參考、行號、預設值等等 - 這意味著沒有任何東西可以反映。

顯然地,這個非常有用的函式庫需要一些真正的文件...
To Top