1. 主页 > 大智慧

PHP遍历对象方法与属性的完整实例讲解

鏈夋病鏈夐亣鍒拌繖绉嶆儏鍐碉紵浣犳帴鎵嬩竴涓埆浜哄啓鐨勭被锛屾弧灞忛兘鏄澶寸鍙峰嵈涓嶇煡閬撲粠鍝笅鎵嬶紵涓婁釜鏈堟垜缁欐柊鍚屼簨婕旂ず璋冭瘯鎶€宸р€斺€斿綋浠栫湅鍒版垜鐢ㄤ笁琛屼唬鐮佸氨鎵掑厜涓€涓鏉傚璞℃椂锛岀溂鐝犲瓙閮藉揩鎺夊嚭鏉ヤ簡锛?/p>

锛堟斁涓嬩綘鐨勶紒锛夊埆鎷縱ar_dump浜嗭紒閭d釜娣蜂贡鐨勮緭鍑鸿皝鐪嬪緱鎳傦紵浠婂ぉ鏁欎綘浠笁涓湡姝h兘鎵撶殑閬嶅巻鎷涘紡锛岃繛鍏勾缁忛獙鐨勮€丳HP绋嬪簭鍛橀兘璇?杩欐嫑搴旇鏃╃偣鍛婅瘔鎴?...


鈥?strong>鈥嬪熀纭€涓夎繛锛氬璞¢噷闈㈠埌搴曟湁浠€涔堬紵鈥?/strong>鈥?br/> 鍏堢湅杩欎釜鐢ㄦ埛绫伙細

php澶嶅埗
class User {
    public $name = '寮犱笁';
    private $age = 25;
    
    public function login() {}
    protected function validate() {}
}

鍩虹闂涓€锛氭€庝箞鏌ョ湅鍏紑灞炴€э紵

php澶嶅埗
foreach (new User() as $key => $value) {
    echo "$key: $value";  // 鍙細杈撳嚭name:寮犱笁 
}

Why锛熷洜涓洪粯璁ら亶鍘嗗彧璁ublic灞炴€э紒灏卞儚浣犲鐨勫鍘呰皝閮借兘杩涳紝浣嗗崸瀹や笂浜嗛攣


鈥?strong>鈥嬪満鏅疄鎴橈細濡備綍鎵掑厜鎵€鏈夊搴曪紵鈥?/strong>鈥?br/> 鎺忓嚭鍙嶅皠杩欎釜鍐呯闀滐細

php澶嶅埗
$ref = new ReflectionClass('User');

// 鑾峰彇鎵€鏈夊睘鎬э紙鍚鏈夛級
$props = $ref->getProperties();
foreach ($props as $prop) {
    $prop->setAccessible(true);
    echo $prop->getName().'='.$prop->getValue(new User())."\n";
}
// 杈撳嚭 name=寮犱笁  age=25

杩欓噷鏈変釜鍧戯紙鎽旇繃璺ょ殑涓炬墜锛夛細鐩存帴getValue()鍓嶅繀椤籹etAccessible(true)锛屽惁鍒欏氨鍍忔挰淇濋櫓鏌滀笉甯︽挰妫?/p>


鈥?strong>鈥嬪鏋滈亣鍒版柟娉曟€庝箞鍔烇紵鈥?/strong>鈥?br/> 鎶奼etProperties鎹㈡垚getMethods锛?/p>

php澶嶅埗
$methods = $ref->getMethods();
foreach ($methods as $method) {
    echo ($method->isPublic() ? '馃煝 ' : '馃敶 ') . $method->getName()."\n";
}
// 杈撳嚭 馃煝 login  馃敶 validate

杩欎釜绾㈢豢鐏爣璇嗘槸鎴戣嚜宸卞姞鐨勶紝瀹樼綉鏂囨。鍙病鏁欒繖涓€斺€旂洿鎺ユ妱浣滀笟涓嶈阿锛?/p>


鈥?strong>鈥嬫€ц兘闄烽槺瀹炴祴瀵规瘮鈥?/strong>鈥?br/> 鐢ㄥ弽灏?VS 鐩存帴璋冪敤锛?/p>

鎿嶄綔鏂瑰紡10涓囨鑰楁椂鍐呭瓨娑堣€?/th>
鍙嶅皠閬嶅巻2.3绉?/td>12MB
鍘熺敓灞炴€?/td>0.05绉?/td>2MB

涓婁釜鏈堢嚎涓婇」鐩湁涓€佸紵鍦ㄥ惊鐜噷鐢ㄥ弽灏勯亶鍘嗭紝宸偣鎶婃湇鍔″櫒CPU璺戠儳浜?..锛堢湡瀹炴渚嬶級


鈥?strong>鈥嬫晳鍛斤紒涓轰粈涔堟垜鐨勭鏈夊睘鎬у彇鍒皀ull锛熲€?/strong>鈥?br/> 鏉ユ鏌ヨ繖涓夋锛?/p>

  1. 鏄惁鐢ㄤ簡getProperties()鑰屼笉鏄痝etMethods()
  2. 鏈夋病鏈夋墽琛宻etAccessible(true)
  3. 瀵硅薄瀹炰緥鏄惁姝g‘浼犲叆getValue()

涓婂懆甯綉鍙媎ebug鍙戠幇浠栨妸new User()鍐欐垚浜嗗瓧绗︿覆锛屽彇鍑烘潵鐨剉alue鍏ㄦ槸绌烘皵


鈥?strong>鈥嬭繘闃讹細杩囨护鎸囧畾鏉冮檺鐨勬柟娉曗€?/strong>鈥?br/> 鎼厤ReflectionMethod鐨勬潈闄愭鏌ワ細

php澶嶅埗
$methods = $ref->getMethods(ReflectionMethod::IS_PROTECTED);

杩欎釜鍙傛暟鏄釜浣嶆帺鐮侊紝鎯冲悓鏃舵煡protected鍜宻tatic鏂规硶鍙互鍐欙細

php澶嶅埗
ReflectionMethod::IS_PROTECTED | ReflectionMethod::IS_STATIC

鏈烘埧娣卞灏忔妧宸э細鐢╞itmask缁勫悎鏌ヨ鏉′欢锛屾瘮鍐欏涓猧f鍒ゆ柇浼橀泤鍗佸€?/p>


涓汉瑙傜偣锛氶亶鍘嗗璞″氨鍍忚€冨彜鈥斺€斾綘姘歌繙涓嶇煡閬撲笅涓€閾插瓙浼氭寲鍑轰粈涔堝钁╀唬鐮併€傛柊鎵嬪垰寮€濮嬪彲浠ュ鐢ㄨ繖浜涘伐鍏峰府浣犵悊娓呮€濊矾锛屼絾闀挎湡鏉ョ湅杩樻槸瑕佸煿鍏荤洿鎺ラ槄璇绘簮鐮佺殑鑳藉姏銆傛瘯绔熷弽灏勮櫧濂斤紝鐪嬪浜嗙溂鐫涗細鐬庯紙瀛楅潰鎰忎箟涓婄殑锛夛紒

本文由嘻道妙招独家原创,未经允许,严禁转载