PHP中常見的魔法方法使用情景及用法總結

2021-08-25 06:05:35 字數 2877 閱讀 5070

__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...