類是物件導向程式設計的基本概念,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 ...