PHP中的類與物件詳細解讀

2021-10-01 02:55:40 字數 3817 閱讀 1806

1. 類與物件

類是物件導向程式設計的基本概念,是一類東西的結構描述 , 是一種抽象的概念 . 物件是一類東西的乙個具體的例項 , 是具體事物 .

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

比如汽車可以抽象為乙個類,汽車擁有名字、輪胎、速度、重量等屬性,可以有換擋、前進、後退等操作方法。

// 定義乙個汽車類

class car

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

$car = new car();

echo $car->getname();

2. 屬性與物件

在類中定義的變數稱之為屬性。屬性宣告是由關鍵字 public,protected 或者 private 開頭,後面跟乙個普通的變數宣告來組成。屬性的變數可以設定初始化的預設值,預設值必須是常量。

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

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

public:公開的 , 任何地方都可以訪問

protected:受保護的 , 類內自身 , 其子類和父類可以訪問

private:私有的 , 類內自身可訪問

類屬性的訪問控制必須定義 , 即必須寫出關鍵字 , 定義為三個中的乙個

類方法不寫關鍵字 , 則預設為公有的

class car 

}// 建立物件

$car = new car();

// 通過物件獲取類屬性與類方法

$car->speedup();

echo $car->speed;

3. 建構函式與析構函式

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

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

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

class car 

function __destruct()

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

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

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

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

4. 靜態屬性與靜態方法

public / protected / private static $變數名
不用例項化類 , 直接呼叫 類名 :: $變數名

但例項化後 , 不允許使用 物件 -> $變數名

public / protected / private static function 方法名()
不用例項化類 , 直接呼叫 類名 :: 方法名()

例項化後 , 物件 -> 方法名()

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

class car 

public static function speedup()

}class bigcar extends car

}bigcar::start();

echo bigcar::getspeed();

如果建構函式定義成了私有方法,則不允許直接例項化物件了,這時候一般通過靜態方法進行例項化,在設計模式中會經常使用這樣的方法來控制物件的建立,比如單例模式只允許有乙個全域性唯一的物件。

class car 

private static $_object = null;

public static function getinstance()

return self::$_object;

}}$car = new car(); //這裡不允許直接例項化物件

$car = car::getinstance(); //通過靜態方法來獲得乙個例項

5. 繼承

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

class car 

}//建立乙個truck類,擴充套件car類,並覆蓋speedup方法,使速度累加50

class truck extends car

}$car = new truck();

$car->speedup();

echo $car->speed;

5. 過載

php中的過載指的是動態的建立屬性與方法,是通過魔術方法來實現的。

class car 

public function __get($key)

return null;

}public function __isset($key)

return false;

}public function __unset($key)

}$car = new car();

$car->name = '汽車'; //name屬性動態建立並賦值

echo $car->name;

if ($car->age)else

unset($car->name);

var_dump($car->name);

class car 

}}$car = new car();

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

echo $car->speed;

6. 高階特性

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

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中return用法詳細解讀

在大部分程式語言中,return關鍵字可以將函式的執行結果返回,php中return的用法也大同小異,對初學者來說,掌握php中return的用法也是學習php的乙個開始。首先,它的意思就是返回 return 是語言結構而不是函式,僅在引數包含表示式時才需要用括號將其括起來。當返回乙個變數時通常不用...

詳細解讀mysql 詳細解讀MySQL中的許可權

一 前言 很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪些許可權。現在很多mysql用著root賬戶在操作,並不是大家不知道用root許可權太大不安全,而是很多人並不知道該給予什麼樣的許可權既安全...

PHP陣列的詳細解讀

陣列的定義 陣列的本質是管理和操作一組變數,陣列中可以儲存任意長度的資料,也可以儲存任意型別的資料。陣列中的單元稱為元素,每個元素包括下標 鍵 和值,訪問元素的時候,是通過下標來訪問,包括一維陣列,二維陣列及多維陣列 即陣列的巢狀 php中分為索引陣列和關聯素組。1 索引陣列 使用整數作為索引,如 ...