您好,登錄后才能下訂單哦!
本篇文章為大家展示了PHP中怎么獲取類和對象的屬性字段,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
獲取類的公有屬性及默認值(包含公有的靜態屬性),用來列舉類的公有屬性字段。
獲取對象的公有屬性及屬性值(不包含公有的靜態屬性)。
如果想要獲取對象的各類屬性(public/protected/private | static),就需要借助強大的反射類來完成了。 PHP
提供了 \ReflectionClass::class
可以幫助我們解析類的實例對象,通過 \ReflectionClass::getProperties
方法獲取對象所有的屬性值。
<?php class Foo { // 類常量 const CLASS_NAME = "Foo"; // 成員屬性 public $name; protected $sex = "female"; private $age; // 類靜態屬性 // php 的對象是可以訪問類的 static 屬性的 // 但應該使用類的方式訪問更為規范 // const 屬性只能通過類的方式訪問 public static $bar = "bar"; public function __construct($name, $sex, $age) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * 獲取對象的屬性字段及屬性值 * @param [type] $property_scope 屬性域 * @param boolean $static_excluded 是否包含靜態屬性 * @return array * @throws \ReflectionException|\Exception */ public function getProperties($property_scope = null, $static_excluded = false) { // 校驗反射域是否合法 if (isset($property_scope) && !in_array($property_scope, [ \ReflectionProperty::IS_STATIC, \ReflectionProperty::IS_PUBLIC, \ReflectionProperty::IS_PROTECTED, \ReflectionProperty::IS_PRIVATE, ])) { throw new Exception("reflection class property scope illegal!"); } $properties_mapping = []; // 談判官 $classRef = new \ReflectionClass($this); $properties = isset($property_scope) ? $classRef->getProperties($property_scope) : $classRef->getProperties(); foreach ($properties as $property) { // 為了兼容反射私有屬性 $property->setAccessible(true); // 當不想獲取靜態屬性時 if ($property->isStatic() && $static_excluded) { continue; } // 將得到的類屬性同具體的實例綁定解析,獲得實例上的屬性值 $properties_mapping[$property->getName()] = $property->getValue($this); } return $properties_mapping; } } $foo = new Foo("big_cat", "male", 29); // 獲取類的公有屬性及默認值(包含靜態屬性) var_dump(get_class_vars(get_class($foo))); // 獲取對象的公有屬性及值(不包含類靜態屬性) var_dump(get_object_vars($foo)); // 獲取對象的靜態屬性 var_dump($foo->getProperties(\ReflectionProperty::IS_STATIC)); // 獲取對象的公有屬性 并排除靜態屬性 var_dump($foo->getProperties(\ReflectionProperty::IS_PUBLIC, true)); // 獲取對象的保護屬性 var_dump($foo->getProperties(\ReflectionProperty::IS_PROTECTED)); // 獲取對象的私有屬性 var_dump($foo->getProperties(\ReflectionProperty::IS_PRIVATE));
/** * 獲取類的常量屬性 * @see https://www.php.net/manual/en/reflectionclass.getconstants.php */ \ReflectionClass::getConstants() /** * 獲取類的方法 * @see https://www.php.net/manual/en/reflectionclass.getmethods.php */ \ReflectionClass::getMethods()
上述內容就是PHP中怎么獲取類和對象的屬性字段,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。