PHP獲取對(duì)象屬性的三種方法實(shí)例分析
本文實(shí)例講述了PHP獲取對(duì)象屬性的三種方法。分享給大家供大家參考,具體如下:
今天查看yii源碼,發(fā)現(xiàn)yii\base\Model中的attribute()
方法是通過(guò)反射獲取對(duì)象的public non-static屬性。記得以前看到的代碼都是用get_object_vars()
這個(gè)函數(shù)獲取的,昨天查看php文檔,發(fā)現(xiàn)還可以用foreach遍歷對(duì)象屬性。于是寫個(gè)例子練習(xí)下。
class TestClass { private $a; protected $b; public $c; public $d; public static $e; private function funcA() { } protected function funcB() { } public function funcC() { } public function getPropertyMethodOne() { echo "[get_object_vars]", PHP_EOL; $vars = get_object_vars($this); foreach ($vars as $k => $v) { echo $k, ' => ', $v, PHP_EOL; } } public function getPropertyMethodTwo() { echo "[foreach object]", PHP_EOL; foreach ($this as $k => $v) { echo $k, ' => ', $v, PHP_EOL; } } public function getPropertyMethodThree() { echo "[reflection]", PHP_EOL; $class = new ReflectionClass($this); foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { if (!$property->isStatic()) { echo $property->getName(), ' => ', $property->getValue($this), PHP_EOL; } } } }
測(cè)試代碼一
$obj = new TestClass(); echo "[get_object_vars]", PHP_EOL; $vars = get_object_vars($obj); foreach ($vars as $k => $v) { echo $k, ' => ', $v, PHP_EOL; } echo "[foreach object]", PHP_EOL; foreach ($obj as $k => $v) { echo $k, ' => ', $v, PHP_EOL; } echo "[reflection]", PHP_EOL; $class = new ReflectionClass($obj); foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { if (!$property->isStatic()) { echo $property->getName(), ' => ', $property->getValue($obj), PHP_EOL; } }
輸出:
[get_object_vars]
c =>
d =>
[foreach object]
c =>
d =>
[reflection]
c =>
d =>
可見(jiàn),當(dāng)著三種方法用在類的外部時(shí),結(jié)果是一樣的。get_object_vars()
和foreach是獲取到的是對(duì)象的public non-static屬性,而通過(guò)反射的話則需要手動(dòng)篩選出public non-static屬性。
測(cè)試代碼二
$obj = new TestClass(); $obj->getPropertyMethodOne(); $obj->getPropertyMethodTwo(); $obj->getPropertyMethodThree();
輸出
[get_object_vars]
a =>
b =>
c =>
d =>
[foreach object]
a =>
b =>
c =>
d =>
[reflection]
c =>
d =>
可見(jiàn),get_object_vars()
和foreach用在類內(nèi)部時(shí),private、protected、public的實(shí)例屬性都能獲取到。反射就不用說(shuō)了,通過(guò)手動(dòng)篩選,各種類型的屬性都能獲取到。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php分割合并兩個(gè)字符串的函數(shù)實(shí)例
這篇文章主要介紹了php分割合并兩個(gè)字符串的函數(shù),實(shí)例分析了php針對(duì)字符串操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06利用PHP制作簡(jiǎn)單的內(nèi)容采集器的原理分析
采集器,通常又叫小偷程序,主要是用來(lái)抓取別人網(wǎng)頁(yè)內(nèi)容的。關(guān)于采集器的制作,其實(shí)并不難,就是遠(yuǎn)程打開(kāi)要采集的網(wǎng)頁(yè),然后用正則表達(dá)式將需要的內(nèi)容匹配出來(lái),只要稍微有點(diǎn)正則表達(dá)式的基礎(chǔ),都能做出自己的采集器來(lái)的。2008-10-10PDO版本問(wèn)題 Invalid parameter number: no parameters were bound
發(fā)現(xiàn)在客戶的某個(gè)PHP版本下,執(zhí)行某類操作的時(shí)候,總是會(huì)報(bào)如下錯(cuò)誤 Invalid parameter number: no parameters were bound,經(jīng)google,發(fā)現(xiàn)是php版本過(guò)低導(dǎo)致2013-01-01PHP strtok()函數(shù)的優(yōu)點(diǎn)分析
相對(duì)于explode()來(lái)說(shuō),strtok()函數(shù)可以控制節(jié)奏。按需切割字串。2010-03-03php中OR與|| AND與&&的區(qū)別總結(jié)
以下是對(duì)php中OR與|| AND與&&的區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下2013-10-10php輸入數(shù)據(jù)統(tǒng)一類實(shí)例
這篇文章主要介紹了php輸入數(shù)據(jù)統(tǒng)一類,實(shí)例分析了針對(duì)輸入數(shù)據(jù)的各種轉(zhuǎn)換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02收集的二十一個(gè)實(shí)用便利的PHP函數(shù)代碼
這里整理的二十一個(gè)實(shí)用便利的PHP函數(shù)代碼比較適合php開(kāi)發(fā)過(guò)程中的直接使用與學(xué)習(xí)參考,對(duì)每種類型的 PHP 開(kāi)發(fā)者都會(huì)有所幫助。2010-04-04PHP Session ID的實(shí)現(xiàn)原理與實(shí)例
這篇文章主要介紹了PHP Session ID的實(shí)現(xiàn)原理與實(shí)例,幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下2021-05-05