物件導向–魔術方法

來源:互聯網
上載者:User
    1. __set()和__get()方法
      用於對私人成員進行賦值或擷取值的操作。
      __set()方法:在程式運行中為私人的成員屬性設定值,它不需要任何傳回值。__set()方法包含兩個參數,分別表示變數的名稱和值。兩個參數不可省略。這個方法不需要主動調用,可以在方法前加上private關鍵字,防止使用者直接調用。
      __get()方法:在程式運行過程中,在對象的外部擷取私人成員屬性的值。它有一個必要的參數,即私人成員屬性名,它返回一個允許對象在外部使用的值。這個方法同樣不需要主動調用,可以在方法前加上private關鍵字,防止使用者直接調用

    2. __isset()和__unset()方法
      isset()函數用於檢測變數是否存在,如果存在則返回true,否則返回false。而在物件導向中,通過isset()函數可以對公有的成員屬性進行檢測,但是對於私人的成員屬性,這個函數就不起作用了,而魔術方法__isset()的作用就是協助isset()函數檢測私人成員屬性。
      如果在對象中存在__isset()方法,當在類的外部使用isset()函數檢測對象中的私人成員屬性時,就會自動調用類中的__isset()方法完成對私人成員屬性的檢測操作。

      __unset()同上。

    3. __call()方法
      __call()方法的作用是當程式試圖調用不存在或不可見的成員方法時,php會先調用__call()方法來儲存方法名及其參數。
      __call()方法包含兩個參數,即方法名和方法參數,其中,方法參數是以數組形式存在的。
      <?phpclass MrSoft{public function MingRi(){echo "調用的方法存在,直接執行此方法";}public function __call($method,$parameter){echo "如果方法不存在,則執行__call()方法.<br>";echo "方法名為:".$method."<br>";echo "方法參數有:";var_dump( $parameter );}}header('Content-Type:text/html;charset=utf-8');$obj1 = new MrSoft();$obj1->MingRi();$obj1->MingR('how','what','why');?>


      調用的方法存在,直接執行此方法
      如果方法不存在,則執行__call()方法.
      方法名為:MingR
      方法參數有:array(3) { [0]=> string(3) "how" [1]=> string(4) "what" [2]=> string(3) "why"}

    4. __toString()方法
      魔術方法__toString()的作用是當使用echo或print輸出對象時,將對象轉化為字串。
      <?phpclass MrSoft{private $type="php編程寶典";public function __toString(){return $this->type;}}$mrsoft = new MrSoft();echo $mrsoft;?>

    5. __autoload()方法
      將一個獨立的、完整 的類儲存到一個php頁中,並且檔案名稱和類名保持一致,這是每個開發人員都需要養成的良好習慣。這樣,在下次重複使用某個類時就可以很輕鬆的找到它。但還有個問題,如果要在一個頁面中引入很多的類,就需要使用include將類一個一個的引入。
      在php5中,應用__autoload()方法解決了這個問題。
      __autoload()方法可以自動執行個體化需要使用的類。當程式要用到一個類,但該類還沒有被執行個體化時,php5將使用__autoload()方法在指定的路徑下自動尋找和該類名稱相同的檔案。如果找到則繼續執行,否則報告錯誤。
      類MrSoft.class.php
      <?phpclass MrSoft{private $cont;public function __construct($cont){$this->cont = $cont;}public function __toString(){return $this->cont;}}?>

      index.php

      <?phpfunction __autoload($class_name){$class_path = $class_name.'.class.php';if (file_exists($class_path)) {include_once($class_path);}else{echo "類路徑錯誤";}}$mrsoft = new MrSoft("北京我愛你");echo $mrsoft;?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.