『壹』 php常見的幾個魔術方法
__construct
__destruct
__clone
__get
__set
__isset
__unset
__call
__tostring
『貳』 php魔術方法__tostring
__tostring()方法:在直接輸出對象引用的時候,就不會產生錯誤,而是自動調用了__tostring()方法,輸出__tostring()方法中返回的字元串
通俗來說就是 對象一般是使用print_r() 或 var_mp() 來列印訪問
但對於一般閑的人來說直接 使用 echo 輸出對象時,必定會報錯的,原因是對象無法使用echo的。
這個時候如果想解決這個錯誤,咱們應該怎麼操作呢?
可以很好的利用__tostring()這個魔術方法
但是切記使用__toString() 時返回值一定要使用return 來進行返回。
<?php
header("content-type:text/html;charset=utf-8");
class demo{
public $foo;
public function __construct($foo){
$this->foo=$foo;
}
//定義一個__toString()方法時,返加一個成員屬性$foo
public function __toString(){
return $this->foo;
}
}
$demo=new demo('hello PHP成員');
echo $demo;
『叄』 PHP常用的幾個魔術方法
Check if this entry is a directory or a file.
const size_t filenameLength = strlen(fileName);
if (fileName[filenameLength-1] == '/')
{
{
『肆』 php什麼是魔術方法
__construct(),
__destruct(),
__call(),
__callStatic(),
__get(),
__set(),
__isset(),
__unset(),
__sleep(),
__wakeup(),
__toString(),
__invoke(),
__set_state(),
__clone()
和
__debugInfo()
等方法在
PHP
中被稱為"魔術方法"(Magic
methods)。在命名自己的類方法時不能使用這些方法名,除非是想使用其魔術功能。
『伍』 php魔術方法有哪些
1.constuct()構造函數
通常實例化完一個對象之後,都要對該對象的屬性進行初始化!在實例化一個對象的時候,PHP系統會自動的調用一個名字叫作construct()的方法,我們把這個方法叫作「構造方法」!
2.destruct()析構方法
與構造方法是一對,構造方法是在一個對象「出生」的時候由系統自動調用的,而析構方法是在一個對象「消失」的時候由系統自動調用的!
析構方法的名字叫destruct();注意裡面不能有任何的參數!
3.clone()克隆
觸發時機:是在克隆一個對象的時候,對新對象進行初始化的工作
4.autoload()自動載入類
當調用不存在的類的時候自動調用!
5.tostring()
當將對象當成字元串使用的時候自動調用
6.invoke()
當將對象當成函數使用的時候自動調用
7,set()
當對無法訪問的屬性賦值時自動調用(比如:類外調用私有屬性)
8.get()
當對獲取無法訪問的屬性值的時候自動調用
9.unset()
當銷毀無法訪問的屬性的時候自動調用
10.isset()
當判斷無法訪問的屬性是否存在的時候自動調用
11.call()
當調用無法訪問的普通方法時自動觸發
『陸』 php5中魔術方法函數有哪幾個,請舉例說明各自的用法
__construct() :實例化對象時被調用;
__destuct():當刪除一個對象或者對象操作終止是被執行;
__call():調用對象不存在方法時被調用;
__get():調用對象不存在的屬性時被調用;
__set():設置對象不存在的屬性時被調用;_
_toString():列印一個對象時被調用,比如echo $obj,print($obj);
__clone():克隆對象時被調用,比如$t = new Test();$tt = clone $t;
__sleep():serialize之前被調用,若對象比較大,想做一些刪除在序列化,可以考慮使用該方法;
__wakeup():unserialize之前被調用,做些對象的初始化;
__isset():檢測對象是否存在屬性的時候被調用,如 isset($c->name);
__unset():unset一個對象屬性時被調用,如:unset($c->name);
__set_state():調用var_export時被調用,用__set_state的返回值作為 var_export的返回值;,
__autoload():實例化一個對象時,如果對應的類不存在,在該方法被調用。
希望你能採納,謝謝。
『柒』 詳解php的魔術方法__get()和__set()使用介紹
先看看php官方文檔的解釋:
__set()
is
run
when
writing
data
to
inaccessible
properties.
__get()
is
utilized
for
reading
data
from
inaccessible
properties.
究竟用中文怎麼翻譯呢?
inaccessible
:n.
難達到;難接近;無法理解。
有代碼有真相:
復制代碼
代碼如下:
<?php
error_reporting(E_ALL);
class
stu{
private
$a;
private
$b
=
0;
public
$c;
public
$d
=
0;
//這里的
private
可以用
protected
public
替代
private
function
__get($name)
{
return
123;
}
//這里的
private
也可以用
protected
public
替代
private
function
__set($name,
$value)
{
echo
"This
is
set
function";
}
}
$s
=
new
stu();
var_mp($s->a);
//output:
123
var_mp($s->b);
//output:
123
var_mp($s->c);
//output:
null
var_mp($s->d);
//output:
0
var_mp($s->e);
//output:
123
$s->a
=
3;
//output:
This
is
set
function
$s->c
=
3;
//no
output
$s->f
=
3;
//output:
This
is
set
function
?>
結果分析:
如果沒有__get方法,執行
var_mp($s->a)
var_mp($s->b)
會有致命的錯誤
如果沒有__get方法,執行
var_mp($s->e)
會有一個notice,提示沒有定義屬性
$e
總結:
1.
從一個難以訪問的屬性讀取數據的時候
__get()
方法被調用
2.
向一個難以訪問的屬性賦值的時候
__set()
方法被調用
3.
難以訪問包括:(1)私有屬性,(2)沒有初始化的屬性
4.
__isset()
__unset()
也類似
『捌』 php魔術方法。。
在 PHP 里,將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法,所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴。
魔術方法的引入是對面向對象編程思想的進一步實現,重載就是通過魔術方法來實現的。
PHP 魔術方法主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等。
最常見的是__construct(), __destruct(),__get(), __set()等:
__construct和__destruct是類的構造函數和析構函數。
『玖』 php5 中魔術方法函數有哪幾個
魔術函數:
9.3 構造函數:__construct()
9.3.1 實例化對象時被調用。
9.3.2 在類中,構造函數是用來初始化對象的,利用構造函數,可以操作對象,並改變它的值。
9.3.3 當__construct和以類名為函數名的函數同時存在時,__construct將被調用,另一個不被調用。
9.3.4 當子類重寫了構造函數,子類被實例化時,只調用子類的構造函數,而父類的構造函數不被調用。
9.4 析構函數:__destruct()
9.4.1 當刪除一個對象或對象操作終止時被調用。
9.4.2 當該對象的所有引用都被刪除,或者對象被顯式銷毀時執行。
9.5 克隆函數:__clone()
9.5.1 當對象被拷貝(克隆)時直接調用。
9.5.2 如$a = new Action(); $a = $object;
9.6 __set($name, $value)
9.6.1 用$object->a = 17的方式給屬性賦值時,如果屬性a存在且是public型,那麼直接給屬性a賦值皆可;
9.6.2 如果屬性a不存在或者是protected/private型,就會調用__set($name, $value)方法。
9.6.3 二個參數:屬性、屬性值。
9.7 __get($name)
9.7.1 用$object->a的方式讀取對象的屬性時,如果屬性a存在且是public型,那麼直接返回該屬性的值;
9.7.2 如果屬性a不存在或者是protected/private修飾的不可直接訪問的類型,就會調該方法並以返回值為准。
9.7.3 一般可以使用該方法使外部可限制性地訪問內部屬性,或者完成類似java中的反射操作。
9.8 __isset($name)
9.8.1 檢測一個對象的屬性是否存在時被調用。
9.8.2 如:isset($c->name),如果name不存在,則觸發該函數。
9.8.3 對不存在或者不可訪問的屬性使用isset()或者empty()時,__isset()會被調用。
9.9 __unset($name)
9.9.1 銷毀一個對象的屬性時被調用。
9.9.2 如:unset($c->name),如果name不存在,則觸發該函數。
9.9.3 當unset一個不存在或者不可訪問的屬性時,__unset()會被調用,否則直接unset該屬性皆可。
9.10 __call($name, $arguments)
9.10.1 當調用不存在或者不可訪問的方法時,會調用__call($name, $arguments)方法。
9.11 __callStatic($name, $arguments)
9.11.1 當在靜態方法中調用不存在或者不可訪問的方法時,會調用__callStatic($name, $arguments)方法。
9.11.2 這個方法 是PHP5.3里才添加的,比較新。
9.12 __toString()
9.12.1 當列印對象時會被直接調用。如 echo $object; 或 print $obj;
9.12.2 注意:這時候php會拋出一個Catchable fatal error錯誤;用print_r列印對象不會觸發此函數。
9.13 __set_state()
9.13.1 用var_export()輸出一個對象時,__set_state()會被調用,輸出內容以該魔術方法的返回值為准。
9.13.2 註:var_export()和var_mp()類似,只是var_export()輸出的內容符合php語法。
9.14 __autoload($name)
9.14.1 實例化一個對象時,如果對應的類不存在,則該方法被調用。
9.14.2 這個函數比較特殊,這個函數並不是作為類的成員方法使用的。
9.14.3 注意:該方法是全局函數,參數是類的名稱。
9.14.4 可以用spl_autoload_register函數來定義其他的函數來代替__autoload
9.15 __sleep()
9.15.1 serialize之前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。
9.16 __wakeup()
9.16.1 unserialize時被調用,做些對象的初始化工作。
『拾』 php魔術方法怎麼用
在 PHP 里,將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法。魔術方法的引入是對面向對象編程思想的進一步實現,重載就是通過魔術方法來實現的。主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等函數。