PHP類和物件

2021-08-07 19:34:08 字數 3887 閱讀 9437

php類和物件

類是物件導向程式設計的基本概念,通俗的理解類就是對現實中某乙個種類的東西的抽象,比如汽車可以抽象為乙個類,汽車擁有名字、輪胎、速度、重量等屬性,可以有換擋、前進、後退等操作方法。

通常定義乙個汽車類的方法為:

class car }

物件通過new關鍵字進行例項化:

$car = new car();

echo $car->getname();

1.php類和物件之建立物件

類通過關鍵字class開頭,然後是類名與花括號,在花括號中定義類的屬性與方法。類名必須是字母或下劃線開頭,後面緊跟若干個字母、數字或下劃線。

//定義乙個類

class car }

要建立乙個類的例項,可以使用new關鍵字建立乙個物件

$car = new car();

//也可以採用變數來建立

$classname = 'car';

$car = new $classname();

2.php類和物件之類的屬性

在類中定義的變數稱之為屬性,通常屬性跟資料庫中的字段有一定的關聯,因此也被稱作「字段」。屬性宣告是由關鍵字public,protected或者private開頭,後面跟乙個普通的變數宣告來組成。屬性的變數可以設定初始化的預設值,預設值必須是常量。

訪問控制的關鍵字代表的意義為:

public:公開的

protected:受保護的

private:私有的

class car

預設為public,外部可以訪問。一般通過->物件操作符來訪問物件的屬性或者方法,對於靜態屬性則使用::雙冒號進行訪問。當在類成員方法內部呼叫的時候,可以使用$this偽變數呼叫當前物件的屬性。

$car = new car();

echo $car->name;   //呼叫物件的屬性

echo $car->color;  //

錯誤受保護的屬性不允許外部呼叫

echo $car->price;  //

錯誤私有屬性不允許外部呼叫

受保護的屬性與私有屬性不允許外部呼叫,在類的成員方法內部是可以呼叫的。

class car}

3.php類和物件之定義類的方法

方法就是在類中的function,很多時候我們分不清方法與函式有什麼差別,在面向過程的程式設計中function叫做函式,在物件導向中function則被稱之為方法。

同屬性一樣,類的方法也具有public.protected以及private的訪問控制。

訪問控制的關鍵字代表的意義為:

public:公開的 protected:受保護的 private:私有的

我們可以這樣定義方法:

class car ​}

$car = new car();

echo $car->getname();

使用關鍵字static修飾的,稱之為靜態方法,靜態方法不需要例項化物件,可以通過類名直接呼叫,操作符為雙冒號::.

class car ​}

echo car::getname(); //結果為「汽車」

4.php類和物件之建構函式和析構函式

php5可以在類中使用__construct()定義乙個建構函式,具有建構函式的類,會在每次物件建立的時候呼叫該函式,因此常用來在物件建立的時候進行一些初始化工作。

class car }

$car = new car(); //例項化的時候 會自動呼叫建構函式__construct,這裡會輸出乙個字串

在子類中如果定義了__construct則不會呼叫父類的__construct.如果需要同時呼叫父類的建構函式,需要使用parent::__construct()顯式的呼叫。

class car }

class truck extends car }

$car = new truck();

同樣,php5支援析構函式,使用__destruct()進行定義,析構函式指的是當某個物件的所有引用被刪除,或者物件唄顯式的銷毀時會執行的函式。

class car

function__destruct()}

$car = new car(); //例項化時會呼叫建構函式

echo '使用後,準備銷毀car物件 \n';

unset($car); //銷毀時會呼叫析構函式

當php**執行完畢以後,會自動**與銷毀物件,因此一般情況下不需要顯式的去銷毀物件。

5.php類和物件之static靜態關鍵字

靜態屬性與方法可以在不例項化類的情況下呼叫,直接使用類名::方法名

的方式進行呼叫。靜態屬性不允許物件使用->操作符呼叫。

class car }

echo car::getspeed();  //呼叫靜態方法

靜態方法也可以通過變數來進行動態呼叫

$func = 'getspeed';

$classname = 'car';

echo $classname::$func();  //動態呼叫靜態方法

靜態方法中,$this偽變數不允許使用。可以使用self,parent,static在內部呼叫靜態方法與屬性。

6.php類和物件之物件繼承

繼承是物件導向程式設計中常用的乙個特性,汽車乙個比較大的類,我們也可以稱為基類,除此之外,汽車還分為卡車、轎車、東風、寶馬等,因為這些子類具有很多相同的屬性和方法,可以使用繼承汽車類來共享這些屬性和方法,實現**的復用。

7.php類和物件之過載

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

方法的過載通過__car來實現,當呼叫不存在的方法的時候,將會轉為引數呼叫__call方法,當呼叫不存在的靜態方法時會使用__call static過載。

class car }

}$car = new car();

$car->speedup(); //呼叫不存在的方法會使用過載

echo $car->speed;

8.php類和物件之物件的高階特性

物件比較,當同乙個類的兩個例項的所有屬性都相等時,可以使用比較運算子==進行判斷,當需要判斷兩個變數是否為同乙個物件的引用時,可以使用全等運算子===進行判斷。

class car

$a = new car();

$b = new car();

if ($a == $b) echo '==';   //true

if ($a === $b) echo '==='; //false

物件賦值,在一些特殊情況下,可以通過關鍵字clone來賦值乙個物件,這時__clone方法會被呼叫,通過這個魔術方法來設定屬性的值。

class car }

$a = new car();

$a->name = 'new car';

$b = clone $a;

var_dump($b);

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

class car

$a = new car();

$str = serialize($a); //物件序列化成字串

echo $str.'';

$b = unserialize($str); //反序列化為物件

var_dump($b);

PHP類和物件

php中用class來定義類,用new例項化物件,用extends繼承類,不過只能單繼承,屬性和方法有public private和protected做訪問控制,預設為public,在類裡定義常量不需要 用 範圍解析符可以呼叫父類的方法,訪問類的靜態變數 靜態方法和常量。範圍解析操作符 也可稱作 p...

PHP類和物件

類是物件導向程式設計的基本概念,通俗的理解類就是對現實中某乙個種類的東西的抽象,比如汽車可以抽象為乙個類,汽車擁有名字 輪胎 速度 重量等屬性,可以有換擋 前進 後退等操作方法。通常定義乙個汽車類的方法為 class car 123456類是一類東西的結構描述,而物件則是一類東西的乙個具體例項,例如...

PHP類和物件

類是物件導向程式設計的基本概念,通俗的理解類就是對現實中某乙個種類的東西的抽象,比如汽車可以抽象為乙個類,汽車擁有名字 輪胎 速度 重量等屬性,可以有換擋 前進 後退等操作方法。通常定義乙個汽車類的方法為 class car 123456類是一類東西的結構描述,而物件則是一類東西的乙個具體例項,例如...