不能實例化的類;
abstract class 類名 {}
就是一個只有方法頭,沒有方法體的方法;
abstract class 類名 {
abstract function 方法名(形參1,形參2, .... );
}
1,抽象方法必須放在抽象類中;抽象類中可以沒有抽象方法(雖然不常見)
2,子類繼承了上級類的抽象方法,則必須:要麼去實現它(就是定義其方法體);要麼自身也是抽象類;
3,子類實現上級類的抽象方法,其本質就是“重寫”(覆蓋),則也要求滿足:
3.1, 訪問控制修飾範圍不能更小;
3.2, 方法的形參需要保持一致;
是指在一個類中,多個具有不同形參的同名方法的現象;
是指:對一個對象(或類)使用其不存在的屬性或方法的時候的,“特別處理機制”;
就是對一個對象的未定義的(不存在的)的屬性進行取值的時候,會自動調用該方法;
就是對一個對象的未定義的(不存在的)的屬性進行賦值的時候,會自動調用該方法;
class A{
public $arr = array();
function __set($key, $value){
$this->arr[$key] = $value;
}
fucntion __get($key){
if( !empty ($this->arr[$key]) ){
return $this->arr[$key];
}
else{
return “未定義的屬性!”;
}
}
}
就是對一個對象的未定義的(不存在的)的屬性進行isset()判斷的時候,會自動調用該方法;
就是對一個對象的未定義的(不存在的)的屬性進行isset()判斷的時候,會自動調用該方法;
是指對一個對象的未定義的方法進行調用的時候,會自動調用方法:__call($方法名,$實參數組 );
是指對一個類的未定義的靜態方法進行調用的時候,會自動調用靜態方法:__callstatic ($方法名,$實參數組 );
class A {
function __call($name, $arg ){
if( $name == “f1”){
$len = count($arg); //實參個數!
if( $len == 1){
//。。。。處理
}
else if( $len == 2){
//。。。。處理
}
else if( $len == 3){
//。。。。處理
}
else{
//不準備處理其他情況。。。這裏可以引發一個錯誤!
}
}
else if( $name == “f2”){
.......
}
..........
}
}
$a1 = new A();
$a1->f1(1);
$a1->f1(2, 3);
$a1->f1(3, 4, 5);
$a1->f2(1);
$a1->f2(2, 3);
就是一種類似類的更爲“簡潔”的語法結構,其中只能定義常量和抽象;
interface 接口名{
常量定義若干個;。。。。。
抽象方法定義若干個;。。。。。//這裏抽象方法不要abstract和訪問控制,默認都是public
}
是對單繼承的語法特性的一種“修正措施”,目的是爲了一定程度上模擬現實世界的“多繼承”特性;
類實現接口:
class 類名 implements 接口1,接口2,....{ 。。。 }
接口之間的繼承:
interface 接口1 extends 接口2{.....}
類和對象的成員訪問的另一個總結:
單例3步曲:
1,私有化構造方法:
2,定義一個私有的靜態變量,以存儲唯一的對象;
3,定義個靜態方法,以判斷是否需要進行實例化該唯一對象,並返回該對象;