我們知道,類的protected方法是無法通過物件來訪問的,這是處於安全考慮。
如果要訪問這個方法,通常的做法是在建立乙個public方法來間接呼叫。
這裡我們使用反射來實現訪問。
class
test
}$obj
=new
test()
;var_dump
($obj
->
meth()
);
php fatal error: uncaught error: call to protected method test::meth() from context 『』
修改後
class
test
}$obj
=new
test()
;$refclass
=new
reflectionclass
(test:
:class);
// 傳入物件或類名,得到reflectionclass物件
$refmeth
=$refclass
->
getmethod
('meth');
// 得到reflectionmethod物件
$refmeth
->
setaccessible
(true);
// 設定為可見,也就是可訪問
$ret
=$refmeth
->
invoke
($obj);
// 傳入物件來訪問這個方法
var_dump
($ret);
// string(4) "test"
如何訪問乙個類的保護變數
或許很多人看了我這個標題,很想打我 類的變數都私有了。你訪問個p啊。不過事實上地球還真有類似的需求。記得2004年的時候,那會做個小的遊戲引擎,大部分的資料都是私有或者保護的,這些在應付遊戲本身的時候已經完全足夠了。但是後來做編輯器的時候,發現絕大部分私有或者保護的成員都是需要被外部訪問到的。但是實...
C 乙個類訪問另乙個類的私有成員和保護成員
友元類 class a friend class b private int aa class b public void output cout a.aa endl private a a 使用友元類時注意 1 友元關係不能被繼承。2 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定...
乙個簡易的反射類庫NMSReflector
以前看過一些 是簡單的讀取sqlreader然後賦值給model,我不是不贊同這種做法,只是看到大篇幅的賦值操作真的有點浪費時間和精力,尤其是一些老專案居多。我看到的還好,多的也就60多個欄位且不用其他orm,如果涉及到變更的話,那麼對維護人員來說可能不僅僅是眼力活甚至還是.體力活。另外就是 的操作...