-
魔術方法
鎖定
- 中文名
- 魔術方法
- 適用領域
- PHP領域
- 所屬學科
- 計算機
- 定 義
- 在 PHP 中以兩個下劃線開頭的方法
魔術方法集合涵義
注意:PHP 將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法。所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴。
魔術方法包含成員
魔術方法__set
簡介:
實例1:
<?php class 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
魔術方法__get
簡介:
實例2:
<?php class 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)
- 參考資料
-
- 1. PHP手冊 .PHP官網[引用日期2014-03-20]
- 2. 潘凱華,劉中華.PHP從入門到精通(第二版):清華大學出版社,2010年7月