__set()
引數:$name,$value
執行過程:當在外部呼叫的類變數為不存在或不可見時,系統會首先呼叫__set()函式。
作用:可以用來設定錯誤資訊,擴充套件類。
__get()
引數:$name
執行過程:當在外部獲取非public類變數值時,系統會首先呼叫__get()函式。
__unset()
引數:$name
執行過程:當外部unset()函式的引數不存在時會呼叫__unset()函式,在內部可以對引數進行操作
例如:(引用自官方文件)
<?php
class propertytest
public function __get($name)
$trace = debug_backtrace();
trigger_error(
'undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
e_user_notice);
return null;
}/** php 5.1.0之後版本 */
public function __isset($name)
/** php 5.1.0之後版本 */
public function __unset($name)
/** 非魔術方法 */
public function gethidden()
}echo "\n";
$obj = new propertytest;
$obj->a = 1;
echo $obj->a . "\n\n";
var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "\n";
echo $obj->declared . "\n\n";
echo "let's experiment with the private property named 'hidden':\n";
echo "privates are visible inside the class, so __get() not used...\n";
echo $obj->gethidden() . "\n";
echo "privates not visible outside of class, so __get() is used...\n";
echo $obj->hidden . "\n";
?>
__isset
引數:$name
執行過程:當外部用isset()函式來判斷類內部的私有變數是否被呼叫時,就會觸發系統呼叫魔術方法呼叫__isset()方法,可以在內部進行判斷,將結果返回給外部。
例子:
<?php
class animal
function __isset($name) }
}$cat=new animal("小花貓",5,20);
var_dump (isset($cat->heigh));
?>
__call
引數:$methodname(方法名),$arr (引數陣列)
使用:當呼叫乙個非公有的方法時,系統會自動呼叫__call()魔術方法,所以可以在__call()內部進行呼叫,像這樣:
<?php
class animal
public function __call($method,$arr)
protected function mycat() }
$cat=new animal("小花貓",5,20);
$cat->mycat();
?>
__callstatic
使用方法和上面的差不多,只不過方法改為靜態方法
例子:
<?php
class animal
public function __callstatic($method,$arr)
protected static function mycat() }
$cat=new animal("小花貓",5,20);
$cat->mycat();
?>
__autoload
引數:$clasname(類名字)
使用:例項化乙個不存在的類時,會自動呼叫__autoload()魔術方法,可以在內部用include對方法進行引入
例子:
<?php
class animal
function __autoload($classname)
$dog=new dog();
$dog->outprint();
?>
__tostring()
無引數,有返回值,返回string型別
使用:當對物件進行列印輸出時,會呼叫__tostring魔術方法,接收返回的字串型別。
例子:
<?php
class animal
}$dog=new animal();
echo "$dog";
?>
__invoke()
呼叫物件時自動呼叫該方法,無引數,無返回值
<?php
class animal
}$cat = new animal();
$cat();
?>
PHP魔法方法的使用
1.get set當類沒有要訪問的屬性時,就呼叫這兩個函式 obj new imooc object obj title hello echo obj title namespace imooc class object function get key 2.call callstatic 當類沒有...
pythoth 中常用的魔法方法
python魔法方法 magic method 顧名思義,魔法總是帶有一些神奇色彩,就跟魔術似的。它也是有自己的規律,在這裡或者說規則更合適一些。魔法方法有乙個非常鮮明的特徵,就是總是被雙下劃線所包圍,之所以稱之為魔法方法,是由於其不是由程式設計師去手動的呼叫,而是在一定場景下自動觸發,有pytho...
Python常見的魔法方法
整理下python常用的魔法方法,後面我會就每一類的魔法方法,具體講解怎麼用。類別方法名 例項的建立 初始化和銷毀 new init del 屬性描述符 get set delete 跟類相關的服務 prepare instancecheck subclasscheck 上下文管理器協議 enter...