PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中獲取對(duì)象屬性的3種方法實(shí)例分析
文章主要介紹了PHP獲取對(duì)象屬性的三種方法,結(jié)合實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中獲取對(duì)象屬性的常見操作技巧,需要的朋友可以參考下。PHP獲取對(duì)象屬性的三種方法,具體如下...
PHP獲取對(duì)象屬性的三種方法,具體如下:
今天查看yii源碼,發(fā)現(xiàn)yii\base\Model中的attribute()
方法是通過反射獲取對(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 =>
可見,當(dāng)著三種方法用在類的外部時(shí),結(jié)果是一樣的。get_object_vars()
和foreach是獲取到的是對(duì)象的public non-static屬性,而通過反射的話則需要手動(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 =>
可見,get_object_vars()
和foreach用在類內(nèi)部時(shí),private、protected、public的實(shí)例屬性都能獲取到。反射就不用說了,通過手動(dòng)篩選,各種類型的屬性都能獲取到。
- 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開啟操作的具體教程
- PHP中間件ICE,ICE的安裝配置,ICE常見編譯和運(yùn)行(異常)
- win7下手動(dòng)配置apache+php+mysql記
- OneinStack一鍵PHP/JAVA/HHVM安裝及VPS手動(dòng)安裝LNMP
php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧
文章主要介紹了PHP yield關(guān)鍵字功能與用法,結(jié)合實(shí)例形式分析了php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧,需要的朋友可以參考下實(shí)例講述PHP yield關(guān)鍵字功能與用法具體如下:y...
Windows7下IIS+php配置教程詳細(xì)介紹
文章主要為大家詳細(xì)介紹了Windows7下IIS+php配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...
PHP序列化的四種實(shí)現(xiàn)方法與橫向?qū)Ρ冉坛?/a>
在PHP中,序列化用于存儲(chǔ)或傳遞 PHP 的值的過程中,同時(shí)不丟失其類型和結(jié)構(gòu)。本文講述PHP序列化的四種方案,感興趣的可以了解一下一、PHP 序列化變量的 4 種方法序列化是將變量轉(zhuǎn)...
PHP基于Redis消息隊(duì)列實(shí)現(xiàn)的消息推送的方法
文章主要介紹了php基于Redis消息隊(duì)列實(shí)現(xiàn)的消息推送的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧基本知識(shí)點(diǎn)重點(diǎn)用到了以下命令實(shí)現(xiàn)我們...
Linux服務(wù)器下 php7安裝redis的方法
文章主要介紹了Linux下 php7安裝redis的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下安裝redis服務(wù)1 下載redis cd /usr/local/ 進(jìn)入安裝目錄 wget http://dow...
PHP判斷電子郵件是否正確的簡(jiǎn)單方法介紹
本篇內(nèi)容里小編給大家整理了一篇關(guān)于php判斷電子郵件是否正確方法,需要的朋友們參考下。PHP判斷電子郵件是否正確即是否有效,是我們PHP面試過程中常見考題之一。我們可以使用P...
在PHP中進(jìn)行curl開啟操作的具體教程
相信大家對(duì)于PHP都并不陌生了,畢竟PHP吸收了C語言、Java里的許多優(yōu)點(diǎn),作為一款腳本語言還是收到很多程序員朋友的喜愛的。PHP里的curl函數(shù)庫(kù)還是非常實(shí)用的,今天小編就給大...
PHP中間件ICE,ICE的安裝配置,ICE常見編譯和運(yùn)行(異常)錯(cuò)誤
ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中間件。使用ICE能使得php(或c++,java,python)與java,c++,.net,python等進(jìn)行交互?;贗CE可以實(shí)現(xiàn)電信級(jí)的...
win7下手動(dòng)配置apache+php+mysql記
本來想學(xué)學(xué)php,于是就想搭建web服務(wù)器和sql環(huán)境,結(jié)果浪費(fèi)掉了不少時(shí)間。大致的總結(jié)下,也算是長(zhǎng)個(gè)記性。使用的安裝包分別是httpd-2.2.22-win32-x86-no_ssl.msi,php-5.2.5-Win32.zip和mysql-installer-communit...
OneinStack一鍵PHP/JAVA/HHVM安裝及VPS手動(dòng)安裝LNMP
說起LNMP,多數(shù)人應(yīng)該知道lnmp.org站長(zhǎng)開發(fā)的LNMP一鍵安裝包,該腳本虛擬主機(jī)管理、FTP用戶管理、Nginx、MySQL/MariaDB、PHP的升級(jí)、常用緩存組件的安裝、重置MySQLroot密...