在類中定義的變數稱之為屬性,通常屬性跟資料庫中的字段有一定的關聯,因此也可以稱作「字段」。屬性宣告是由關鍵字 public,protected 或者 private 開頭,後面跟乙個普通的變數宣告來組成。屬性的變數可以設定初始化的預設值,預設值必須是常量。
訪問控制的關鍵字代表的意義為:
public:公開的
protected:受保護的
private:私有的
class car
預設都為public,外部可以訪問。一般通過->物件操作符來訪問物件的屬性或者方法,對於靜態屬性則使用::雙冒號進行訪問。當在類成員方法內部呼叫的時候,可以使用$this偽變數呼叫當前物件的屬性。
$car = new car();
echo $car->name; //呼叫物件的屬性
echo $car->color; //錯誤 受保護的屬性不允許外部呼叫
echo $car->price; //錯誤 私有屬性不允許外部呼叫
受保護的屬性與私有屬性不允許外部呼叫,在類的成員方法內部是可以呼叫的。
class car
}
方法就是在類中的function,很多時候我們分不清方法與函式有什麼差別,在面向過程的程式設計中function叫做函式,在物件導向中function則被稱之為方法。
同屬性一樣,類的方法也具有public,protected 以及 private 的訪問控制。
訪問控制的關鍵字代表的意義為:
public:公開的
protected:受保護的
private:私有的
我們可以這樣定義方法:
class car
}$car = new car();
echo $car->getname();
使用關鍵字static修飾的,稱之為靜態方法,靜態方法不需要例項化物件,可以通過類名直接呼叫,操作符為雙冒號::。
class car
}echo car::getname(); //結果為「汽車」
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**執行完畢以後,會自動**與銷毀物件,因此一般情況下不需要顯式的去銷毀物件。
訪問控制:
訪問控制通過關鍵字public,protected和private來實現。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。
類屬性必須定義為公有、受保護、私有
之一。為相容php5以前的版本,如果採用 var 定義,則被視為公有。
類中的方法可以被定義為
公有、私有或受保護
。如果沒有設定這些關鍵字,則該方法預設為
公有。
class car
}
如果建構函式定義成了私有方法,則不允許直接例項化物件了,這時候一般通過靜態方法進行例項化,在設計模式中會經常使用這樣的方法來控制物件的建立,比如單例模式只允許有乙個全域性唯一的物件。
靜態屬性與方法可以在不例項化類的情況下呼叫,直接使用類名::方法名
的方式進行呼叫。靜態屬性不允許物件使用->操作符呼叫。
class car
}echo car::getspeed(); //呼叫靜態方法
靜態方法也可以通過變數來進行動態呼叫
$func = 'getspeed';
$classname = 'car';
echo $classname::$func(); //動態呼叫靜態方法
靜態方法中,$this偽變數不允許使用。可以使用self,parent,static在內部呼叫靜態方法與屬性。
class car
public static function speedup()
}class bigcar extends car
}bigcar::start();
echo bigcar::getspeed();
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);
PHP學習筆記之類
宣告類的關鍵字時class,宣告的格式如下 訪問許可權修飾符 class 類名其中,訪問許可權修飾符時可選的,常見的修飾符包括public private和protected。預設情況下為public。成員屬性必須使用關鍵字進行修飾,常見的關鍵字包括public private和protected等...
PHP之類補充
最終類與最終方法 如果父類中的方法被宣告為 final,則子類無法覆蓋該方法。如果乙個類被宣告為 final,則不能被繼承。final class a class a 抽象類與抽象方法 abstract class a class aextends a 介面 介面可以看作是抽象類的更高層面的抽象,可...
PHP之類與物件
定義乙個car類並例項化乙個物件 class car car new car car name 寶馬 echo car getname 2.一般通過 物件操作符來訪問物件的屬性或者方法,對於靜態屬性則使用 雙冒號進行訪問。當在類成員方法內部呼叫的時候,可以使用 this偽變數呼叫當前物件的屬性。我們...