php-物件導向(5)

來源:互聯網
上載者:User
1.回顧:上篇學習了 抽象類別,介面和特徵

2.這篇將學習 重載!

3.重載 :使用魔術方法實現

3.1 總結

      (1)php中的重載是指動態建立類屬性和方法      (2)當調用當前環境下未定義或不可見的類屬性或方法時,重載方法會被調用      (3)所有的重載方法都必須聲明為 public      (4)通過魔術方法的參數都不能通過引用傳遞      (5)和傳統的物件導向重載不同      (6)傳統的重載是用於提供多個同名類方法,各方法參數類型和個數不同      (7)isset() 和 unset()  魔術方法      (8)callStatic() php5.3
  3.2屬性重載
   示範一個例子:
       # __set __get __isset ,__unset     class MemberTest {      /**  被重載的資料儲存在此  */    private $data = array();     /**  重載不能被用在已經定義的屬性  */    public $declared = 1;       /**  只有從類外部存取這個屬性時,重載才會發生 */    private $hidden = 2;    public function __set($name, $value) {        echo "Setting '$name' to '$value' ";        $this->data[$name] = $value;    }    public function __get($name) {        echo "Getting '$name' ";        if (array_key_exists($name, $this->data)) {            return $this->data[$name];        }        $trace = debug_backtrace();        trigger_error(            'Undefined property via __get(): ' . $name .            ' in ' . $trace[0]['file'] .            ' on line ' . $trace[0]['line'],            E_USER_NOTICE);        return null;    }    /**  PHP 5.1.0之後版本 */    public function __isset($name) {        echo "Is '$name' set? ";        return isset($this->data[$name]);    }    /**  PHP 5.1.0之後版本 */    public function __unset($name) {        echo "Unsetting '$name' ";        unset($this->data[$name]);    }    /**  非魔術方法  */    public function getHidden() {        return $this->hidden;    }}echo "
 ";$obj = new MemberTest;$obj->a = 1;echo $obj->a . " ";var_dump(isset($obj->a));unset($obj->a);var_dump(isset($obj->a));echo " ";echo $obj->declared . " ";echo "Let's experiment with the private property named 'hidden': ";echo "Privates are visible inside the class, so __get() not used... ";echo $obj->getHidden() . " ";echo "Privates not visible outside of class, so __get() is used... ";echo $obj->hidden . " ";       
  3.3 方法重載
  示範一個例子:
  #__call , __callStaticclass MethodTest {    public function __call($name, $arguments) {        // 注意: $name 區分大小寫        echo "Calling object method '$name' "             . implode(', ', $arguments). " ";    }    /**  PHP 5.3.0之後版本  */    public static function __callStatic($name, $arguments) {        // Note: value of $name is case sensitive.        echo "Calling static method '$name' "             . implode(', ', $arguments). " ";    }}$obj = new MethodTest;$obj->runTest('in object context');MethodTest::runTest('in static context');  // PHP 5.3.0之後版本

重載,有點不好理解,需要練習!

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

以上就介紹了php-物件導向(5),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.