PHP高階(第二彈 類和物件)

2021-08-07 08:13:22 字數 3571 閱讀 2771

類是物件導向程式設計的基本概念,php中也有類和物件的概念。

比如定義乙個汽車類:

// 定義乙個類

class

car

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

public

function

getprice

() }

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

$car = new car();

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

$classname = 'car';

$car = new

$classname();

echo

$car->getname();

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

class

car

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

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

class

car

}class

truck

extends

car

}$car = new truck();

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

class

car

function

__destruct

() }

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

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

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

靜態屬性與方法可以在不例項化類的情況下呼叫,直接使用類名::方法名的方式進行呼叫。靜態屬性不允許物件使用->操作符呼叫。

class

car

}// 呼叫靜態方法

echo car::getspeed();

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

$func = 'getspeed';

$classname = 'car';

echo

$classname::$func();

其實在一開始的例子中,已經接觸到訪問控制了。訪問控制通過關鍵字public,protected和private來實現。公有的類成員可以在任何地方被訪問,受保護的類成員可以被其自身以及其子類和父類訪問,私有的類成員只能被其定義所在的類訪問。預設為公有。

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

class

car

private

static

$_object = null;

public

static

function

getinstance

() return

self::$_object;

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

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

php中的過載指的是動態的建立屬性與方法。

屬性的過載通過__set__get__isset__unset來實現,它們分別是對不存在的屬性的賦值、讀取、判斷屬性是否設定、銷毀屬性。

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;

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

class

car

}}$car = new car();

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

echo

$car->speed;

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

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);

第二彈 getch getchar和gets

緩衝輸入函式,函式只有在滿足輸入次數要求的前提下,遇到回車時才結束輸入,之前所有的字元都會逐個顯示在螢幕上,但是只有第乙個字元返回乙個ascii碼。具體的過程就是getchar 被呼叫時,程式就等著使用者按鍵,且將使用者輸入的字元依次回顯到螢幕,使用者必須摁完規定的次數 迴圈語句 即使是回車也要摁 ...

第二章 類和物件

1.類和物件 類 student 物件 s1,s2 類的一般形式 class student 成員函式的實現 2.成員的訪問許可權 公有,私有,保護 未宣告哪一類,預設許可權為private 3.訪問物件 s1 s2 或 p 的成員 物件名.函式名 s1.disp 指標變數 函式名 p disp i...

PHP基礎知識總結 第二彈

1 什麼是陣列?php中的陣列更負責和靈活 陣列中每個元素由乙個特殊的識別符號區分,這個識別符號為鍵,鍵又稱下標,陣列中每乙個實體都有鍵和值 2 如何宣告陣列?相比js,求陣列長度的函式不再是用length而是用count 陣列變數名 a 直接為陣列元素賦值 arr 0 0 arr 1 1 arr ...