PHP OOP

類跟對象的關係
類是對象的抽象(對象的描述(屬性),對象的行爲(方法))
 
對象是類的實體
 
面相對象的三大特徵:封裝、集成、多態
 
自定義類
Class Person{
 
}
 
屬性定義
屬性是類裏面的成員,因此要定義屬性的前提條件是須要聲明一個類
 
Class Person{
    public $name;// 屬性
    public $age;
    public $sex;
}
 
方法定義
方法是定義特定功能的代碼塊,在類中定義方法表示,建立對象以後,對象的特定行爲;
 
Class Person{
 
    public function eat($food){
        echo "Person can eat ".$food;
    }
}
 
實例化對象
Class Person{
 
    public $name;// 屬性
    public $age;
    public $sex;
 
    public function eat($food){
        echo "Person can eat ".$food;
    }
 
}
 
$person1=new Person();
 
屬性的賦值
$person1->name="curtis";
echo $person1->name;
 
類方法的調用
$person1->eat("Apple");
 
繼承(PHP是單繼承,也就是一個子類只能有一個父類)
爲何要繼承?
回覆:爲了屬性、方法的重複利用;
 
業務場景:
有個Person類,有一個Student類;
Person裏面有姓名、年齡、性別
若是Student裏面再將上面的屬性定義一次,那就糟蹋了繼承這個神器;
 
Person類叫Student類的父類,Student類是Person類的之類;
 
Class Person{
 
    public $name;// 屬性
    public $age;
    public $sex;
 
    public function eat($food){
        echo "can eat ".$food;
    }
 
}
 
Class Student extends Person{
 
    public $student_id;
 
    public function write(){
        echo "I can write";
    }
 
    public function read(){
        echo "I can read";
    }
}
 
$student1=new Student();
 
$student1->name="curtis1";
echo $student1->name;
echo "<br />";
 
$student1->eat("面");
echo "<br />";
 
訪問修飾符
public protected private
 
public 當前類,子類中都可訪問;
protected 當前類,子類內部容許訪問;
private 當前類內部容許訪問;
 
這個地方須要重點了解:
範圍
 
什麼叫類內部?
{}內叫類內部,出了{},實例化對象的時候構造函數也是內內部;
 
Class Person{
 
    public $name;// 屬性
    public $age;
    private $sex;// 私有屬性
 
    public function eat($food){
        echo "eat ".$food;
    }
 
    function __construct($sex){
        echo "性別:".$sex;
    }
 
}
 
Class Student extends Person{
 
    public $student_id;
 
    public function write(){
        echo "I can write";
    }
 
    public function read(){
        echo "I can read";
    }
}
 
$person1=new Person("男");
 
 
static 關鍵字
爲何要有這麼一個關鍵字?
 
常量
PI
 
靜態屬性 public static $PI = 3.14;
靜態方法 
 
靜態成員訪問方式(類外部):
類名::屬性名稱
 
在當前類中訪問靜態屬性:
statis::屬性名;
 
在子類內部訪問父類靜態成員,parent::屬性名;statis::屬性名;
 
class Person
{
 
    public $name;
    // 屬性
    public $age;
 
    private $sex;
    // 私有屬性
    public function eat($food)
    {
        echo "eat " . $food;
    }
 
    public static $PI = 3.14;
 
    /**
     * 構造函數
     */
    function __construct($sex)
    {
        echo "性別:" . $sex;
    }
 
    function show(){
        echo static::$PI;
    }
}
 
class Student extends Person
{
 
    public $student_id;
 
    public function write()
    {
        echo "I can write";
    }
 
    function __construct()
    {}
 
    public function read()
    {
        echo "I can read";
    }
 
    public function add()
    {
        echo 1 + parent::$PI."<br />";
        echo 2 + static::$PI;
    }
}
 
$person1 = new Person("男");
echo "<br />";
$person1->show();
echo "<br />";
echo Person::$PI . "<br />";
$student1 = new Student();
echo Student::$PI;
echo "<br />";
$student1->add();
 
方法的重寫
方法的重載
 
什麼叫相同的方法,什麼叫不一樣的方法?
回覆:相同的方法:方法名稱相同,方法的參數列表相同;
       不一樣的方法:方法名稱不一樣;方法名稱相同,方法的參數列表不一樣;
 
爲何會有方法的重寫?
回覆:父類定義的方法子類有一樣的方法,子類的中的方法要實現有本身的行爲;
 
方法的重載
爲何會有方法的重載?
回覆:類中一樣一個方法名稱,經過不一樣的參數傳遞實現各自的行爲;
 
final關鍵字
跟方法的重寫對應來的
父類中有一個final關鍵字修飾的方法,子類想對該方法進行重寫那是不被容許的;
 
接口(interface)
相關文章
相關標籤/搜索