PHP(7) 類和對象

屬性聲明是由關鍵字 publicprotected或者 private 開頭,然後跟一個普通的變量聲明來組成。屬性中的變量可以初始化,但是初始化的值必須是常數。在類的成員方法裏面,可以用 ->(對象運算符):$this->property(其中 property 是該屬性名)這種方式來訪問非靜態屬性。靜態屬性和常量則是用 ::(雙冒號):self::$property 來訪問

類的自動加載: spl_autoload_register() 函數可以註冊任意數量的自動加載器,當使用尚未被定義的類(class)和接口(interface)時自動去加載。

<?php
    //自動加載類MyClass1和MyClass2
    spl_autoload_register(function ($class_name) {
        require_once $class_name . '.php';
        echo "Want to load $class_name.\n";
        throw new Exception("Unable to load $class_name.");
    });

    $obj  = new MyClass1();
    $obj2 = new MyClass2();
?>

繼承實現了函數的重載時,需要使用“parent::”後加函數名來訪問父類的實現方法

構造函數:void __construct ([ mixed $args [, $... ]] )

析構函數:void __destruct ( void )

self,parent 和 static 這三個特殊的關鍵字是用於在類定義的內部對其屬性或方法進行訪問的

抽象函數:

實現類可以定義抽象類中抽象函數未定義的參數

<?php
abstract class AbstractClass
{
    // 我們的抽象方法僅需要定義需要的參數
    abstract protected function prefixName($name);

}

class ConcreteClass extends AbstractClass
{

    // 我們的子類可以定義父類簽名中不存在的可選參數
    public function prefixName($name, $separator = ".") {
        if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
        }
        return "{$prefix}{$separator} {$name}";
    }
}

$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>

魔術方法:PHP 將所有以 __(兩個下劃線)開頭的類方法保留爲魔術方法。所以在定義類方法時,除了上述魔術方法,建議不要以 __ 爲前綴。

默認情況下對象是通過引用傳遞的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章