PHP過載overloading技術?

過載技術概念:

常規大多數面嚮物件語言中的過載概念:

是指,在一個類中,定義多個同名不同參的方法的現象!

類似這樣:

class A{

function f1(){ ... }

function f1($p1) { .... }

function f1($p1, $p2) { .... }

}

//則可以如下去使用:

$a1 = new A();

$a1.f1(); //這裡,“.”就相當於php中的“->”符號。

$a1.f1(11);

$a1.f1(12,34);

PHP語言中的過載概念:

php中,一個類中,不可以定義同名的方法——不管引數如何。

則:

php中的過載概念是:

是指:使用一個物件或類的未定義過的屬性或方法時的內部處理機制。

可見:

php中的過載概念,跟大多數面嚮物件語言中的常規過載概念——完全沒有關係。

比如:

class A{

public $p1 = 1;

}

$a1 = new A();

$a1->p1 = 11; //使用一個定義過的屬性!

$a1->p2 = 22; //使用一個未定義的屬性!

工具/原料

PHP過載overloading技術

屬性過載:

如果使用一個物件的未定義的屬性,就構成屬性過載。

先看本質:

屬性的本質是:變數;

變數有幾種操作:

賦值:

取值:

isset()判斷是否存在:

unset()銷燬變數:

則一個物件的屬性也同樣有該4種操作。

則,屬性過載,就是對一個“未定義”的屬性,進行如上4種操作之一時的應對機制(處理辦法)。

其上,每一個操作,都會自動各自去呼叫一個預先定義好的“魔術方法”:

1:__set($name, $value):

當對一個物件的未定義的屬性,進行“賦值”時,此時會自動呼叫類中預先定義好的魔術方法:__set();

該方法帶2個引數:

$name : 表示該正在賦值的未定義的屬性名;

$value : 表示該正在賦值的值;

實際上,之所以對一個物件的未定義的屬性進行賦值,自然是希望該物件來儲存該資料。

舉例:

PHP過載overloading技術

2: __get($name)方法

當對一個物件的未定義的屬性,進行“取值”時,此時會自動呼叫類中預先定義好的魔術方法:__get();

該方法帶1個引數:

$name : 表示該正在取值的未定義的屬性名;

程式碼示例:

PHP過載overloading技術

測試結果:

PHP過載overloading技術

3:__isset()判斷:

當對一個物件的未定義的屬性,進行“isset()”判斷時,此時會自動呼叫類中預先定義好的魔術方法:__isset();

該方法帶1個引數:

$name : 表示該正在isset()的未定義的屬性名;

PHP過載overloading技術

測試程式碼結果:

PHP過載overloading技術

4:__unset()銷燬:

當對一個物件的未定義的屬性,進行“unset()”操作時,此時會自動呼叫類中預先定義好的魔術方法:__unset();

該方法帶1個引數:

$name : 表示該正在unset()的未定義的屬性名;

PHP過載overloading技術

技術, 概念, 屬性, 未定義,
相關問題答案