public(公有):公有類可以在任何地方被訪問;
protected(受保護):受保護的類成員則可以被其自身及其子類和父類訪問;
private(私有):只能被自身的類訪問。
1、類常量const :類中始終保持不變的值定義為常量,且定義和使用常量的時候不需要使用 $ 符號
注意:常量的值必須是一個定值,不能是變量,類屬性,數學運算的結果或函數調用。
2、自 PHP 5.3.0 起,可以用一個變量來動態調用類。但該變量的值不能為關鍵字(如self,parent或static)。
3、范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問?靜態?成員,類常量,還可以用于覆蓋類中的屬性和方法。
self,parent和static這三個特殊的關鍵字是用于在類定義的內部對其屬性或方法進行訪問的。
4、PHP 5 支持抽象類和抽象方法。定義為抽象的類不能被實例化。任何一個類,如果它里面至少有一個方法是被聲明為抽象的,那么這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現。
abstract?class ? ? AbstractClass
{
? ? ? ? ? ?//?強制要求子類定義這些方法
? ? ? ? ? ? abstract ? ?protected ? ?functiongetValue();
? ? ? ? ? ? abstract ? ?protected ? ?functionprefixValue($prefix);
? ? ? ? ? ?//?普通方法(非抽象方法)
? ? ? ? ? ? ?public?functionprintOut()?{
? ? ? ? ? ? ? ? ? ? ? ?print$this->getValue()?."\n";
? ? ? ? ? ? ? ? }
}
classConcreteClass1extendsAbstractClass
{
? ? ? ? ? ? ? ? ?protected?functiongetValue()?{
? ? ? ? ? ? ? ? ? return"ConcreteClass1";
}
public?functionprefixValue($prefix)?{
? ? ? ? ? ? ? ?return"{$prefix}ConcreteClass1";
}
}
class ? ?ConcreteClass2 ? ? ? ? ?extends ? ? ? ? ? ? AbstractClass
{
public?functiongetValue()?{
return"ConcreteClass2";
}
public?functionprefixValue($prefix)?{
return"{$prefix}ConcreteClass2";
}
}
$class1=?newConcreteClass1;
$class1->printOut();
echo$class1->prefixValue('FOO_')?."\n";
$class2=?newConcreteClass2;
$class2->printOut();
echo$class2->prefixValue('FOO_')?."\n";
?>
////答案
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
5、使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。
接口是通過interface關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。
接口中定義的所有方法都必須是公有,這是接口的特性。
要實現一個接口,使用implements操作符。類中必須實現接口中定義的所有方法,否則會報一個致命錯誤。類可以實現多個接口,用逗號來分隔多個接口的名稱。