面向對象筆記1、類 對象 常量 $this self parent 靜態 最終 抽象

1.面向過程與面向對象理解

1.1.面向過程的編程思想

  • 面向過程是以過程(步驟)爲中心的編程思想
  • 例如:遞歸思想、冒泡思想、二分法查找
  • 解決一個大問題,先把大問題分解成一個個小問題,再把小問題一個個解決,最終大問題解決了

1.2.面向對象的編程思想

  • 面向過程是以事物(對象)爲中心的編程思想
  • 面向過程着重與做什麼,面向對象着重於誰來做

總結:面向對象適合大項目(人多),面向過程適合小項目(人少)。

2.類和對象的關係

  • 現實中,先有對象,後有類
  • 在計算機中,先有類,後有對象

2.1類的概念

  • 類就是分類、類別、概念、理論,無形的、看不見、摸不着、不存在
  • 類由相同屬性和方法構成
  • 一個類可以產生千千萬萬個對象

2.2對象的概念

  • 對象就是一個個的實體。有形的、存在的
  • 對象也是由屬性(特徵)和方法(行爲)構成

3.類的定義

語法格式說明:

  1. class是聲明類的關鍵字,不區分大小寫;
  2. 類名、函數名、關鍵字、都不區分大小寫;
  3. ClassName是類的名稱,類名的命名規則與變量已有,但不帶$符號;
  4. 類名可以由字母、數字、下劃線構成;
  5. 類名不能以數字開頭,但可以以字母、下劃線開頭
  6. 類名一般用“駝峯式”命名;
  7. 類名後部分小括號();
  8. 大括號{}定義的是類的成員屬性和成員方法。
//例:定義一個學生類
class Student{
    //成員屬性
    public $name="神樂";
    public $sex="70";
    //成員方法
    public function showInfo(){
        echo "{$this->name}的年齡是{$this->sex}歲!";
    }
}

4.定義類的成員屬性

  • 類中只有兩個內容,分別爲:成員屬性和成員方法。類的成員就是對象,又稱“對象屬性”和“對象方法”

4.1成員屬性介紹

  • 成員屬性:就是普通變量
  • 成員屬性和普通變量的區別:
  • (1)成員屬性一定要有前提,就是“誰的屬性”,普通變量一般都是全局變量;
  • (2)成員屬性一定要加權限控制符,而普通變量不需要

4.2定義格式

  • 權限控制符 變量名 = 變量值;
  • 可以給變量制定默認值,也可以沒有

4.3訪問修飾符

主要用來保護數據的安全

修飾符 說明
public(公共權限) 在任何地方可以訪問,主要指類內部、類外部,子類中都可以訪問
protected(受保護的權限) 只能在本類中、子類中訪問,在類外不能訪問
private(私有的權限) 只能在本類中訪問,在類外、子類中都無權訪問

5.定義類的成員方法

5.1成員方法介紹

  • 成員方法:就是普通函數
  • 成員方法與普通函數的區別:
  • (1)成員方法,一定是某個對象的方法,不能單獨存在
  • (2)成員方法要加權限控制符,普通函數不需要加
  • (3)成員方法可以省略權限控制符,默認爲public,建議不要省略
  • 成員方法和普通函數一樣,都有返回值和參數

5.2定義格式

權限控制符 function funName(形參1,形參2,…){
//該方法的功能代碼;
[return 參數]
}

6.創建類的實例對象

6.1實例對象含義

  • 類可以產生N多個對象
  • 類幾乎不佔用內存,但每個對象都要佔內存
  • 平常只有對象纔可以幫我們做工作,而不是類
  • 在js中,創建類的對象的方法:var obj=new Student();
  • 在PHP中,創建類的對象的方法:$obj = new Student();
  • 使用new關鍵字來創建類的對象
  • 對象不能單獨存在,對象必須屬於某個類。沒有類,一定沒有對象

6.2定義格式

//創建類的對象的語法(類的實例化)
$obj=new ClassName;//無參數 無括號
$obj=new ClassName();//無參數 有括號
$obj=new ClassName(實參1,實參2,...);//有參數 有括號

7.對象屬性的操作

7.1訪問對象的屬性和方法

  • 在js中、訪問對象的屬性和方法,使用小數點來訪問:document.write()
  • 在PHP中,訪問對象的屬性和方法,使用箭頭->來訪問:obj>nameobj->name、obj->showInfo()
  • obj>obj->name表示訪問$name變量值的屬性
  • objobj訪問屬性,屬性不加符號

7.2對象屬性的操作:增加、刪除、修改、讀取

//類的實例化
$obj=new Student();
//1.修改對象屬性:對已存在的屬性重新複製
//$obj->$name表示訪問$name變量值的屬性
//$obj訪問屬性,屬性不加$符號
$obj->name="kakura";
//2.添加新屬性:給不存在的屬性賦值
$obj->cartoon="銀魂";
//3.刪除屬性
unset($obj->name,$obj->sex);
//4.讀取對象屬性的值
echo "{$obj->name}的年齡是{$obj->sex}歲!";

8.僞變量$this

  • PHP中$this代表當前對象,用來調用對象的屬性和方法
  • $this只能在成員方法中存在,其他地方都不能使用
  • $this對象是怎麼來的?當使用$obj對象調用成員方法時,自動將當前對象$obj傳遞到成員方法中,在成員方法中,使用$this變量來代替傳遞過來的$obj變量
//例:定義一個學生類
class Student{
    //成員屬性
    private $name="神樂";
    private $sex="70";
    //私有的成員方法:返回一條水平線
    private function showLine(){
        return '<hr/>';
    }
    //成員方法
    public function showInfo(){
        $str="<h2>{$this->name}的基本信息如下:</h2>";
        $str.=$this->showLine();
        $str.= "{$this->name}的年齡是{$this->sex}歲!";
        echo $str;
    }
}
$obj=new Student();
$obj->showInfo();

9.self關鍵字

- $this slef
代表 代表當前對象 代表當前類
調用 調用對象的 成員屬性、成員方法 調用類的 類常量、靜態屬性、靜態方法
符號 使用箭頭->調用 使用雙冒號::調用
位置 只能在成員方法中使用 可用在成員方法,靜態方法中

以下代碼可對比上一個代碼:

class Student{
    //公共的靜態方法
    public static $title="<h2>club</h2>";
    //私有的靜態方法
    private static function showLine(){
        return "<hr/>";
    }
    //公共的成員方法
    public function showInfo($name,$age){
        $str=self::$title;
        $str.=self::showLine();
        $str.="{$name}的年齡是{$age}歲";
        echo $str;
    }
}
//創建學生類的對象
$obj=new Student();
$obj->showInfo("kakura",70);
//創建第2個對象
$obj2=new Student();
$obj2->showInfo("gangna",20);

10.parent關鍵字

  • self代表當前類,parent代表父類
  • self可以調用本類的內容:類常量、靜態屬性、靜態方法、成員方法
  • parent可以調用父類的內容:類常量、靜態屬性、靜態方法、成員方法

11.定義類的常量

  • 常量:不能修改,不能刪除
  • 提示:在一次HTTP請求過程中,常量不能修改
  • 類常量定義使用const關鍵字,Define()定義的常量爲全局常量
  • 類常量,就是類的常量,與對象無關
  • 類常量只能通過類名(類名::常量)來調用,成員的東西,只能通過對象來調用
  • 訪問類常量,是通過範圍解析符(::)來訪問類的常量:Student::TITLE
  • 訪問對象的內容,是通過箭頭->來訪問:$obj->name
  • 類常量在內存中只有一份,不會隨着對象增加而增加。
  • 類常量可以被所有對象共享
  • 好處:節省內存
//例:定義一個學生類
class Student{
    //類常量
    const DB_HOST="localhost";
    const DB_USER="root";
    const DB_PWD="";
    //公共的成員方法
    public function showInfo(){
        $str="主機名:".Student::DB_HOST;
        $str.="<br>用戶名:".Student::DB_USER;
        $str.="<br>密碼:".Student::DB_PWD;
        return $str;
    }
}
//1.直接訪問類的常量,靜態化調用方式
$str="主機名:".Student::DB_HOST;
$str.="<br>用戶名:".Student::DB_USER;
$str.="<br>密碼:".Student::DB_PWD;
echo $str."<hr/>";
//2.對象實例化
$obj=new Student();
echo $obj->showInfo();

12 靜態屬性和靜態方法

  • static關鍵字修飾
  • 靜態屬性和方法,與類相關,與對象無關
  • 靜態屬性和方法在內存中只有一份,不會隨着對象增加而增加。
  • 可以被所有對象共享
  • 靜態屬性的值是可以改變的
  • 靜態屬性和方法,是有權限控制符的
//例:定義一個學生類
class Student{
    //公共的靜態方法
    static public $title="<h2>club</h2>";//多個修飾符關鍵字,順序可以不一致
    //私有的靜態方法
    private static function showLine(){
        return "<hr/>";
    }
    //公共的成員方法
    public function showInfo($name,$age){
        $str=Student::$title;
        $str.=Student::showLine();
        $str.="{$name}的年齡是{$age}歲";
        echo $str;
    }
}
//創建學生類的對象
$obj=new Student();
$obj->showInfo("kakura",70);
//創建第2個對象
$obj2=new Student();
$obj2->showInfo("gangna",20);

13 最終類和最終方法

  • Final最終類,不能被繼承,直接實例化。該類已經完善,不需升級擴展
  • 最終方法,不能被重寫,直接調用
  • 一般,數據庫操作類,也可定義爲最終類

14 抽象類和抽象方法

  • Abstract抽象類:該類只能被繼承,不能直接實例化。常用於基礎類
  • 抽象方法:該方法沒有方法體,抽象方法必須先繼承,後重寫
  • 如果一個類中有一個抽象方法,該類必須聲明爲抽象類
  • 抽象方法作用:方法的命名規範,是一種監督的機制
  • 抽象類中,也可能有其他元素:成員屬性、成員方法、靜態屬性、具體方法、常量
  • 抽象方法不能是靜態方法,只能是成員方法
//定義抽象的商品基礎類
abstract class Shop{
    //抽象方法
    abstract protected function showInfo($a,$b);
    abstract protected function readMe();
}
//定義手機類,並繼承商品類
final class Mobile extends Shop{
    //重寫showInfo()抽象方法
    public function showInfo($a2,$b2){
        echo "{$a2}的年齡是{$b2}歲";
    }
    //重寫readMe()抽象方法
    public function readMe(){
        echo "<hr>這是成員方法:".__METHOD__;
    }
}
//創建手機類對象
$obj=new Mobile();
$obj->showInfo("kakura",70);
$obj->readMe();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章