集合涵義,包含成員,__set(),__get(),__construct(),__destruct(),
集合涵義
在PHP中以兩個下劃線開頭的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被稱為"魔術方法"(Magic methods)。如果希望PHP調用這些魔術方法,首先必須在類中定義,否則PHP不會執行未創建的魔術方法。
注意:PHP 將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法。所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴。
包含成員
__set()
簡介:
當程式試圖寫入一個不存在或者不可見的成員變數時,PHP就會執行__set()方法。__set()方法包含兩個參數,分別表示變數名稱和變數值,兩個參數都不可省略。
實例1:
<?phpclass SportObject{ private $type=''; public function __get($name){ if(isset($this->$name)){ echo'變數'.$name.'的值為:'.$this->$name.'<br>'; }else{ echo'變數'.$name.'未定義,初始化為0<br>'; $this->$name=0; } } public function __set($name,$value){ if(isset($this->$name)){ $this->$name=$value; echo'變數'.$name.'賦值為:'.$value.'<br>'; }else{ $this->$name=$value; echo'變數'.$name.'被初始化為:'.$value.'<br>'; } }} $MyComputer=newSportObject(); $MyComputer->type='DIY'; $MyComputer->type;?>
例1輸出結果為:
變數type賦值為:DIY
變數type的值為:DIY
變數type的值為:DIY
__get()
簡介:
當程式試圖調用一個未定義或不可見的成員變數時,可以通過__get()方法來讀取變數值。__get()方法有一個參數,表示要調用的變數名。
實例2:
<?phpclass SportObject{ private $type=''; public function__get($name){ if(isset($this->$name)){ echo'變數'.$name.'的值為:'.$this->$name.'<br>'; }else{ echo'變數'.$name.'未定義,初始化為0<br>'; $this->$name=0; } } public function __set($name,$value){ if(isset($this->$name)){ $this->$name=$value; echo'變數'.$name.'賦值為:'.$value.'<br>'; }else{ $this->$name=$value; echo'變數'.$name.'被初始化為:'.$value.'<br>'; } }} $MyComputer=newSportObject(); $MyComputer->name;?>
例2輸出結果為:
變數name未定義,初始化為0
變數name被初始化為:0
__construct(),__destruct()
簡介:
- 在每次創建新對象時先調用此方法
-對象的所有引用都被刪除或者當對象被顯式銷毀時執行
實例3:
<?php/** * 清晰的認識__construct() __destruct */class Example { public static $link; //在類實例化的時候自動載入__construct這個方法 public function __construct($localhost, $username, $password, $db) { self::$link = mysql_connect($localhost, $username, $password); if (mysql_errno()) { die('錯誤:' . mysql_error()); } mysql_set_charset('utf8'); mysql_select_db($db); } /** * 通過__construct連結好資料庫然後執行sql語句...... */ //當類需要被刪除或者銷毀這個類的時候自動載入__destruct這個方法 public function __destruct() { echo '<pre>'; var_dump(self::$link); mysql_close(self::$link); var_dump(self::$link); }}$mysql = new Example('localhost', 'root', 'root', 'test');
例3輸出結果為:
resource(2) of type (mysql link)
resource(2) of type (Unknown)