久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

php魔術方法簡介

php魔術方法簡介

前面的話

  php在面向對象部分有很多相關的魔術方法,這些方法為面向對象實現提供了便利,本文將詳細介紹魔術方法

構造方法

  大多數類都有一種稱為構造函數的特殊方法。當創建一個對象時,它將自動調用構造函數,通常用它執行一些有用的初始化任務

  構造函數的聲明與其它操作的聲明一樣,只是其名稱必須是兩個下劃線__construct( )。這是PHP5中的變化;PHP4的版本中,構造函數的名稱必須與類名相同。為了向下兼容,如果一個類中沒有名為__construct( )的方法,PHP將搜索一個與類名相同的方法

void __construct ([ mixed $args [, $... ]] )

  如果子類中定義了構造函數則不會隱式調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)

<?phpclass BaseClass {    function __construct() {        print "In BaseClass constructor ";    } }class SubClass extends BaseClass {    function __construct() {        parent::__construct();       print "In SubClass constructor ";    } }

析構方法

  與構造方法相對的就是析構方法。析構方法是PHP5新添加的內容,在PHP4中沒有析構方法。析構方法是在對象被銷毀之前自動調用的方法,主要執行一些特定的操作,例如關閉文件,釋放結果集等

  與構造方法類似,一個類的析構方法名稱必須是兩個下劃線 __destruct( )。析構函數不能帶有任何參數

<?phpclass MyDestructableClass {    function __construct() {        print "In constructor ";       $this->name = "MyDestructableClass";    }   function __destruct() {        print "Destroying " . $this->name . " ";    } }//In constructor Destroying MyDestructableClass$obj = new MyDestructableClass();?>

不可訪問屬性

get()

  讀取不可訪問屬性(protected、private)時,__get()會被調用,并將屬性名以第一個參數(string)傳進此方法中

public mixed __get ( string $name )

<?phpclass demo{     protected $protected = 1;    public $public = 2;    private $private = 3;    function __get($name){         echo "111{$name}111<br>";     } }$d1 = new demo;$d1->protected;//111protected111$d1->public;$d1->private;//111private111?>

set()

  在給不可訪問屬性(protected、private)賦值時,__set() 會被調用,并將屬性名以第一個參數(string),值作為第二參數(mixed)傳進此方法中

public void __set ( string $name , mixed $value )
<?phpclass demo{     protected $protected = 1;    public $public = 2;    private $private = 3;    function __set($name,$value){         echo "0{$name}0{$value}<br>";     } }

isset()

  當對不可訪問屬性(protected、private)調用 isset() 或 empty() 時,__isset() 會被調用

public bool __isset ( string $name )
<?phpclass demo{     protected $protected = 1;    public $public = 2;    private $private = 3;    function __isset($name){         echo "0{$name}0<br>";     } }

unset()

  當對不可訪問屬性(protected、private)調用unset()時,__unset()會被調用

public void __unset ( string $name )

<?phpclass demo{     protected $protected = 1;    public $public = 2;    private $private = 3;    function __unset($name){         echo "0{$name}0<br>";     } }

對象復制

clone()

  在對象克隆時會自動調用clone()方法,這方法不需要任何參數,可以通過該方法對克隆后的副本重新初始化

  clone()方法會自動包含this和that兩個對象的引用,this是副本對象的引用,that是原本對象的引用

<?php     class Person{         private $name;        private $sex;        private $age;        function __construct($name="",$sex="",$age=1){             $this->name= $name;            $this->sex = $sex;            $this->age = $age;         }        function __clone(){             $this->name = $this->name."的副本";         }        function say(){             echo "我的名字:" .$this->name.",性別:".$this->sex.",年齡:".$this->age."<br>";         }     }

字符串

toString()

  __toString()方法用于一個類被當成字符串時應怎樣回應,它是快速獲取對象的字符串表示的最便捷的方式,是直接輸出對象引用時自動調用的方法

<?phpclass TestClass{
public $foo; public function __construct($foo)
{
$this->foo = $foo;
} public function __toString() {
return $this->foo;
}
}$class = new TestClass('Hello');echo $class;//Hello?>

對象不存在

call()

  在對象中調用一個不可訪問方法時,__call()會被調用

callStatic()

  在靜態上下文中調用一個不可訪問方法時,__callStatic()會被調用

<?phpclass MethodTest {     public function __call($name, $arguments)      {         echo "Calling object method '$name' "              . implode(', ', $arguments). " ";     }    public static function __callStatic($name, $arguments)      {         echo "Calling static method '$name' "              . implode(', ', $arguments). " ";     } }

自動加載類

autoload()

  在PHP5中,可以定義一個__autoload()函數,它會在試圖使用尚未被定義的類時自動調用。通過調用此函數,腳本引擎在PHP出錯失敗前有了最后一個機會加載所需的類

<?phpfunction __autoload($class_name) {     require_once $class_name . '.php'; }

串行化

sleep()

  在調用serialize()函數將對象串行化時,檢查類中是否存在一個魔術方法 __sleep()。如果存在,該方法會先被調用,然后才執行序列化操作。此功能可以用于清理對象,并返回一個包含對象中所有應被序列化的變量名稱的數組。如果該方法未返回任何內容,則 NULL 被序列化,并產生一個 E_NOTICE 級別的錯誤

  __sleep()函數不需要接受任何參數,但需要返回一個數組,在數組中包含需要串行化的屬性。未被包含在數組中的屬性將在串行化時被忽略。如果沒有在類中聲明__sleep()方法,對象中的所有屬性都將被串行化

wakeup()

  在調用unserialize()函數將對象反串行化對象時,則會自動調用對象中的__wakeup()方法,用來在二進制串重新組成一個對象時,為新對象中的成員屬性重新初始化

  wakeup()經常用在反序列化操作中,例如重新建立數據庫連接,或執行其它初始化操作

<?phpclass Connection {     protected $link;    private $server, $username, $password, $db;       public function __construct($server, $username, $password, $db)     {         $this->server = $server;        $this->username = $username;        $this->password = $password;        $this->db = $db;        $this->connect();     }    private function connect()     {         $this->link = mysql_connect($this->server, $this->username, $this->password);        mysql_select_db($this->db, $this->link);     }    public function __sleep()     {         return array('server', 'username', 'password', 'db');     }    public function __wakeup()     {         $this->connect();     } }?>

函數調用

invoke()

  當嘗試以調用函數的方式調用一個對象時,__invoke()方法會被自動調用

<?phpclass CallableClass {     function __invoke($x) {         var_dump($x);     } }

【補充】

set_state()

  當調用var_export()導出類時,set_state()方法會被調用,本方法的唯一參數是一個數組,其中包含按 array('property' => value, …) 格式排列的類屬性

  [注意]var_export()返回關于傳遞給該函數的變量的結構信息,它和var_dump()類似,不同的是其返回的表示是合法的PHP代碼,也就是說,var_export返回的代碼,可以直接當作php代碼賦給一個變量。 而這個變量就會取得和被var_export一樣的類型的值

<?phpclass A{
public $var1; public $var2; public static function __set_state($an_array)
{
$obj = new A; $obj->var1 = $an_array['var1']; $obj->var2 = $an_array['var2']; return $obj;
}
}

相關參考:php中文網

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
尹人成人综合网| 国产精品日本一区二区不卡视频 | 国产极品久久久久久久久波多结野| 免费精品视频在线| 中文字幕成人| 青青伊人久久| 国产精品久久国产愉拍| 久久不见久久见中文字幕免费| 日本成人在线不卡视频| 亚洲一区二区免费看| 99国产精品私拍| 久久成人一区| 日本不卡高清| 国产精品成人3p一区二区三区| 嫩草伊人久久精品少妇av杨幂| 精品亚洲自拍| 四虎4545www国产精品 | 欧美日韩1区| 国产精品欧美三级在线观看| 国产精成人品2018| 国产一区二区三区成人欧美日韩在线观看 | 亚洲深夜福利在线观看| 日韩福利视频网| 国产精品hd| 亚洲综合电影| 精品1区2区3区4区| 日本亚洲欧洲无免费码在线| 国产日韩视频在线| 麻豆91在线播放| 日韩久久精品| 六月天综合网| 国产麻豆精品久久| 国产理论在线| 亚洲欧美日韩国产一区| 91九色综合| 福利在线免费视频| aa亚洲婷婷| 国产乱码精品| 今天的高清视频免费播放成人| 一区二区国产精品| 精品一区二区三区四区五区| 精品91久久久久| 国产精品mm| 欧洲毛片在线视频免费观看| 日本电影久久久| а√天堂8资源中文在线| 中文精品在线| 欧美91在线| 伊人影院久久| 久久99国产精品视频| 一区二区三区视频免费观看 | 日韩一区二区久久| 久久激情av| 在线日韩一区| 国产精品亲子伦av一区二区三区 | 欧美一区二区三区高清视频| 日韩一区网站| 视频福利一区| 日本久久二区| 香蕉精品久久| 国产精品一区二区三区av麻| 久久一区二区三区喷水| 日本午夜免费一区二区| 久久婷婷av| 国产欧美丝祙| 香蕉成人久久| 91亚洲一区| 日本欧美在线| 亚洲女同一区| 福利精品一区| 亚洲一区日韩在线| 成人三级高清视频在线看| 综合亚洲视频| 欧美日韩精品免费观看视完整| 亚洲永久精品唐人导航网址| 国产精品久久观看| 日韩视频一二区| 伊人精品一区| 91日韩免费| 国产精品极品| 亚洲精品影视| 欧美日韩高清| 中文字幕在线免费观看视频| 欧美一区自拍| 丝袜美腿一区二区三区| 老牛影视精品| 麻豆精品av| 日韩精品亚洲专区| 国产精品婷婷| 久久国产电影| 福利片在线一区二区 | 亚洲精品综合| 亚洲黄页一区| 韩国精品主播一区二区在线观看| 国产精品宾馆| 日本免费在线视频不卡一不卡二| 亚洲中字黄色| 国产中文一区| 日韩一区二区三区在线免费观看| 欧美在线不卡| 免费在线观看日韩欧美| 美女网站一区| 欧美sss在线视频| av资源新版天堂在线| 久久精品二区亚洲w码| 国产日韩一区二区三区在线播放| 亚洲资源在线| 蜜桃视频在线观看一区二区| 夜久久久久久| 性色av一区二区怡红| 一区二区亚洲精品| 欧美日韩国产免费观看视频| 激情综合自拍| 黄色成人精品网站| 伊人久久大香线蕉av不卡| 亚洲www啪成人一区二区| 在线人成日本视频| 中文在线资源| 九九色在线视频| 99国产精品一区二区| 久久三级视频| 九一成人免费视频| 亚洲黄色影院| 喷白浆一区二区| 一本综合精品| 欧美日韩91| 国产精品手机在线播放| 国产精品一区高清| 麻豆国产精品| 精品一区不卡| 日韩一区自拍| 精品一区三区| 亚洲久久在线| 日韩精品一区二区三区中文字幕| 日韩 欧美一区二区三区| 奇米狠狠一区二区三区| 国产日韩精品视频一区二区三区| 国产精品亲子伦av一区二区三区| 久久中文精品| 日韩久久精品| 影音国产精品| 亚洲+小说+欧美+激情+另类| 日韩欧美中文在线观看| 国产精品亚洲欧美| 久久av资源| 成人黄色av| 久久中文亚洲字幕| 亚洲综合日本| 欧美日韩亚洲一区三区| 久久久久黄色| 亚洲va在线| 午夜在线视频观看日韩17c| 日韩亚洲精品在线观看| 久久永久免费| 1024精品一区二区三区| 美女久久一区| 国产伦精品一区二区三区在线播放 | 综合国产在线| 国产精品一国产精品k频道56| 精品精品国产三级a∨在线| 久久精品影视| 在线精品亚洲| 欧美国产中文高清| 成人免费电影网址| 午夜亚洲福利| 国精品产品一区| 99在线精品免费视频九九视| 国产精品主播| 亚洲婷婷免费| 中文字幕日韩高清在线| 精品国产美女a久久9999| 影音国产精品| 欧美激情99| 精品91久久久久| 久久99精品久久久久久园产越南 | 国产日韩欧美一区二区三区| 97精品国产| 蜜臀a∨国产成人精品| 精品国产亚洲一区二区三区大结局| 五月激情久久| 亚洲精品动态| 成人在线免费观看网站| 国产毛片久久| 激情综合婷婷| 久久亚洲美女| 国产一区二区三区久久久久久久久| 国产一级久久| 国产精品成久久久久| 激情欧美一区| 欧美精品aa| 亚洲永久字幕| 四虎成人av| 亚洲毛片视频| 成人在线视频区| 日韩三级视频| 91成人网在线观看| 国产精品久久久久9999高清| 在线视频精品| 日本在线高清| 国产日韩一区|