PHP學習筆記之PHP面向對象(八)

常用格式

1.定義類

    class name{}

2.創建對象(實例化)

    $obj = new name();

3.訪問對象中的成員

    $obj->attr;

4.const常量

可以在類中定義常量,即不會在類中改變的值.對於從該類實例化的任何對象來說,常量值在這些對象的整個生命週期中都保持不變

    echo self::PI;//類內部訪問
    echo 類名::PI //類外部訪問

5.static靜態屬性與靜態方法

使用 static 關鍵字可以用來標識成員屬性,也可以用來標識成員方法,靜態成員屬於類所有,所以我們在靜態方法裏,不能使用 $this來引用靜態成員

    //定義一個名爲Person的類
    class Person{
        //設置常量attr爲"常量"
        const attr = "常量";
        //設置靜態變量$name爲"aaa";
        static $name = "aaa";
        //設置公開變量 $age爲"18";
        public $age = 18;
        //設置該類的show函數
        function show(){
            //輸出常量attr 必須用 self::attr 的方式
            echo self :: attr
            //輸出靜態變量$name 也必須用self::$name的方式
            echo self :: $name
            //輸出該類的一個公開變量
            echo $this -> age;
        }
    }
    //定義$obj爲一個Person類
    $obj = new Person();
    //執行$obj的show()函數
    $obj -> show();
    //錯誤的輸出常量方式
    //echo $obj->attr;
    //正確的輸出常量方式
    //echo Person::attr;
    //輸出類的公開變量,直接用->訪問
    echo $obj->age;
    //輸出類的靜態變量
    echo $obj::$name;
    //輸出類的所有屬性
    echo Person;

構造函數和析構函數

構造函數

通常用來對成員屬性進行初始化賦值

    __construct($name,$age);

析構函數

與構造函數對應的就是析構方法,析構方法允許在銷燬一個類之前執行一些操作或完成一些功能,比如說關閉文件,釋放結果集等.析構函數不能帶有任何參數,其名稱必須是

    __destruct()
//定義類
class Person{
    //該類的構造函數
    function __construct($name,$age){
        $this->name = $name;
        $this->age = $age;
    }
    //該類的show函數
    function show(){
        echo "姓名:$this->name"."<br>年齡:$this->age";
    }
    //該類的析構函數,造所有操作完成時觸發
    function __destruct(){
        echo "完成";
    }
}
$obj = new Person("abc",18);
$obj->show();
$obj->show();
$obj->show();
$obj->show();
$obj->show();
//最後一個show()執行完之後析構函數會執行
$obj->show();

訪問修飾符(作用域描述符)

訪問修飾符允許開發人員對類的訪問進行限制,這是PHP5的新特性

public公共修飾符

類的成員將沒有訪問限制,所有的外部成員都可以訪問(讀寫)這個類成員

private私有修飾符

被修飾爲private的成員,對於同一個類裏地所有成員是可見的,即沒有訪問限制;但對於該類的外部代碼是不允許改變甚至讀操作,對於該類的子類,也不能訪問

protected 保護修飾符

被修飾爲protected的成員不能被該類的外部代碼訪問.但是對於該類的直接子類有訪問權限,可以進行屬性,方法的讀寫操作.被子類繼承的protected成員,在子類外部同樣不能被訪問

class Person{
    public $name = "abc";
    private $age = 18;
    protected $a = 123;
    function show(){
        echo $this -> name;
        echo $this -> age;
        echo $this -> a;
    }
}
$obj = new Person();

//public是公開的,外部也可以訪問
echo $obj -> name;
//private是私有的,外部不能訪問
echo $obj -> age;
//protected受保護的,外部不可訪問
echo $obj -> a;

//extends創建person類的子類son
class Son extends Person{
    function show2(){
        echo $this -> name;
        //繼承父級私有變量,無法訪問
        //echo $this -> age;
        echo $this -> a;
    }
}
$son = new Son();
$son ->show();

封裝

封裝就是把對象的屬性和行爲結合成一個獨立的相同單位,並儘可能隱蔽對象的內部細節

繼承

面向對象開發方法建立在繼承概念的基礎上,這種策略提高了代碼的重用性。

在PHP中,類繼承通過 extends 關鍵字實現;

繼承自其他類的類稱爲子類(child class 或 subclass)

子類所繼承的類稱爲父類( parent class) 或 基類 (base class)

多態

對象的多態性是指在父類中定義的屬性或行爲被子類繼承之後,可以具有不同的數據類型或表現出不同的行爲。這使得同一個屬性或行爲在父類及其各個子類中具有不同的語義。

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