有時候,php指令碼裡使用到的類名會是不定值的變數,這個時候需要一種,能夠通過字串作為引數來呼叫以該字串為名稱的類的方法和屬性的途徑。
目前還沒有發現較好的呼叫不定類名的屬性的通用途徑,即可以同時兼顧例項化不定類名和不定類名的雙冒號呼叫屬性這兩種形式的途徑,
只能照顧到:
$class = new $classname;
echo $class->attributename;
這樣的例項化過程確實可以實現不定類名類屬性的取得,但是:
echo $classname::$attributename;
是會出錯的,只找到一種方法:
$attributes = get_class_vars($classname);
echo $attributes['attributename'];
而不定類名的類方法的呼叫卻簡單得多,因為php提供了相應的函式即:
call_user_func&call_user_func_array
這兩者的作用就是通過字串引數來呼叫以該字串命名的類內的方法:
call_user_func($functionname,$param1,$param2,......);
這樣就等同於呼叫$functionname($param1,$param2,.....);
而要呼叫類方法的寫法是:
call_user_func(array($classname,$functionname),$param1,$param2,......);
等同於呼叫$classname::$functionname($param1,$param2,.....);
注意,這種寫法只能用於呼叫類內的靜態方法。
而call_user_func_array的用法基本一樣,區別在於$param1、$param2這些提供給方法的引數變數的寫法不一樣:
call_user_func($functionname,array($param1,$param2,......));
以及:call_user_func(array($classname,$functionname),array($param1,$param2,......));
後者用起來更符合函式呼叫的觀念。
C 動態呼叫類方法和屬性
var js new jiaoshi 建立類本身 type t js.gettype 反射出類的例項 object o activator.createinstance t system.reflection.propertyinfo pi t.getproperty xq id 獲得方法資訊 sy...
獲取呼叫當前方法的類名
第一種常規方式 stacktraceelement stack new throwable getstacktrace for int i 0 i stack.length i view code stacktraceelement stack new throwable getstacktrace...
3 8類屬性和類方法
使用面相物件開發,第 1 步是設計類 使用類名 建立物件,建立物件的動作有兩步 物件建立後,記憶體中就有了乙個物件的實實在在的存在 例項 因此,通常也會把 建立出來的物件叫做類的例項 建立物件的動作叫做例項化 物件的屬性叫做例項屬性 物件呼叫的方法叫做例項方法 在程式執行時 物件各自擁有自己的例項屬...