文章主要介紹了PHP獲取對(duì)象屬性的三種方法,結(jié)合實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中獲取對(duì)象屬性的常見(jiàn)操作技巧,需要的朋友可以參考下。
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ì)象屬性。于是寫(xiě)個(gè)例子練習(xí)下。
classTestClass {private$a;protected$b;public$c;public$d;publicstatic$e;privatefunctionfuncA() {}protectedfunctionfuncB() {}publicfunctionfuncC() {}publicfunctiongetPropertyMethodOne() {echo"[get_object_vars]", PHP_EOL;$vars= get_object_vars($this);foreach($varsas$k=>$v) {echo$k,' => ',$v, PHP_EOL;}}publicfunctiongetPropertyMethodTwo() {echo"[foreach object]", PHP_EOL;foreach($thisas$k=>$v) {echo$k,' => ',$v, PHP_EOL;}}publicfunctiongetPropertyMethodThree() {echo"[reflection]", PHP_EOL;$class=newReflectionClass($this);foreach($class->getProperties(ReflectionProperty::IS_PUBLIC)as$property) {if(!$property->isStatic()) {echo$property->getName(),' => ',$property->getValue($this), PHP_EOL;}}}}
測(cè)試代碼一
$obj=newTestClass();echo"[get_object_vars]", PHP_EOL;$vars= get_object_vars($obj);foreach($varsas$k=>$v) {echo$k,' => ',$v, PHP_EOL;}echo"[foreach object]", PHP_EOL;foreach($objas$k=>$v) {echo$k,' => ',$v, PHP_EOL;}echo"[reflection]", PHP_EOL;$class=newReflectionClass($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)著三種方法用在類(lèi)的外部時(shí),結(jié)果是一樣的。get_object_vars()和foreach是獲取到的是對(duì)象的public non-static屬性,而通過(guò)反射的話則需要手動(dòng)篩選出public non-static屬性。
測(cè)試代碼二
$obj=newTestClass();$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用在類(lèi)內(nèi)部時(shí),private、protected、public的實(shí)例屬性都能獲取到。反射就不用說(shuō)了,通過(guò)手動(dòng)篩選,各種類(lèi)型的屬性都能獲取到。
- php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧
- Windows7下IIS+php配置教程詳細(xì)介紹
- PHP序列化的四種實(shí)現(xiàn)方法與橫向?qū)Ρ冉坛?/a>
- PHP基于Redis消息隊(duì)列實(shí)現(xiàn)的消息推送的方法
- Linux服務(wù)器下 php7安裝redis的方法
- PHP判斷電子郵件是否正確的簡(jiǎn)單方法介紹
- 在PHP中進(jìn)行curl開(kāi)啟操作的具體教程
- PHP中間件ICE,ICE的安裝配置,ICE常見(jiàn)編譯和運(yùn)行(異常)
- win7下手動(dòng)配置apache+php+mysql記
- OneinStack一鍵PHP/JAVA/HHVM安裝及VPS手動(dòng)安裝LNMP
分享到:
投訴收藏














