移動app介面編程技術-學習實現之PHP類其他特性

來源:互聯網
上載者:User
  • Static靜態關鍵字

    靜態。 在類中,被他標記的變數或方法,不屬於任何一個對象。訪問的時候要使用“::“。並且在類中自我調用的時候要是用”self::”
    例如:

classCar {privatestatic$speed = 10;    publicfunctiongetSpeed() {returnself::$speed;    }    //在這裡定義一個靜態方法,實現速度累加10publicstaticfunctionspeedUp()    {returnself::$speed += 10;    }}$car = new Car();Car::speedUp();  //調用靜態方法加速echo$car->getSpeed();  //調用共有方法輸出當前的速度值

靜態方法也可以通過變數來進行動態調用。

$func = 'getSpeed';$className = 'Car';echo$className::$func();  //動態調用靜態方法
  • 存取控制

存取控制通過關鍵字public,protected和private來實現。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私人的類成員則只能被其定義所在的類訪問。

類屬性必須定義為公有、受保護、私人之一。

類中的方法可以被定義為公有、私人或受保護。如果沒有設定這些關鍵字,則該方法預設為公有。

如果建構函式定義成了私人方法,則不允許直接執行個體化對象了,這時候一般通過靜態方法進行執行個體化,在設計模式中會經常使用這樣的方法來控制對象的建立,比如單例模式只允許有一個全域唯一的對象。

classCar {privatefunction__construct() {echo'object create';    }    privatestatic$_object = null;    publicstaticfunctiongetInstance() {if (empty(self::$_object)) {            self::$_object = new Car();             //內部方法可以調用私人方法,因此這裡可以建立對象        }        returnself::$_object;    }}//$car = new Car(); //這裡不允許直接執行個體化對象$car = Car::getInstance(); //通過靜態方法來獲得一個執行個體
  • 繼承
classCar {public$speed = 0; //汽車的起始速度是0publicfunctionspeedUp() {$this->speed += 10;        return$this->speed;    }}//定義繼承於Car的Truck類classTruckextendsCar{publicfunctionspeedUp() {$this->speed = parent::speedUp() + 50;    }}$car = new Truck();$car->speedUp();echo$car->speed;
  • 重載

PHP中的重載指的是動態建立屬性與方法,是通過魔術方法來實現的。屬性的重載通過__set,__get,__isset,__unset來分別實現對不存在屬性的賦值、讀取、判斷屬性是否設定、銷毀屬性。

classCar {private$ary = array();    publicfunction__set($key, $val) {$this->ary[$key] = $val;    }    publicfunction__get($key) {if (isset($this->ary[$key])) {            return$this->ary[$key];        }        returnnull;    }    publicfunction__isset($key) {if (isset($this->ary[$key])) {            returntrue;        }        returnfalse;    }    publicfunction__unset($key) {unset($this->ary[$key]);    }}$car = new Car();$car->name = '汽車';  //name屬性動態建立並賦值echo$car->name;

方法的重載通過__call來實現,當調用不存在的方法的時候,將會轉為參數調用__call方法,當調用不存在的靜態方法時會使用__callStatic重載。

lass Car {    public$speed = 0;    publicfunction__call($name, $args) {if ($name == 'speedUp') {            $this->speed += 10;        }    }}$car = new Car();$car->speedUp(); //調用不存在的方法會使用重載echo$car->speed;
  • 類對象比較

對象比較,當同一個類的兩個執行個體的所有屬性都相等時,可以使用比較子“==“進行判斷,當需要判斷兩個變數是否為同一個對象的引用時,可以使用全等運算子“===“進行判斷。

classCar {}$a = new Car();$b = new Car();if ($a == $b) echo'==';   //trueif ($a === $b) echo'==='; //false

對象複製,在一些特殊情況下,可以通過關鍵字clone來複製一個對象,這時__clone方法會被調用,通過這個魔術方法來設定屬性的值。

classCar {public$name = 'car';    publicfunction__clone() {$obj = new Car();        $obj->name = $this->name;    }}$a = new Car();$a->name = 'new car';$b = clone$a;var_dump($b);

對象序列化,可以通過serialize方法將對象序列化為字串,用於儲存或者傳遞資料,然後在需要的時候通過unserialize將字串還原序列化成對象進行使用。

classCar {public$name = 'car';}$a = new Car();$str = serialize($a); //對象序列化成字串echo$str.'
';$b = unserialize($str); //還原序列化為對象var_dump($b);

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

以上就介紹了移動app介面編程技術-學習實現之PHP類其他特性,包括了方面的內容,希望對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.