#1 self用法
self是指向定義它的當前類的指標。當前類(current class)
<?php
class
person
//獲取年齡
public
static
function
getage()
}/*}}}*/
輸出
[self] name:i am person
[self] age:18
#2 static用法
static是指向呼叫它的類的指標。函式呼叫在執行時繫結呼叫類(calling class)
<?php
class
person
//獲取年齡
public
static
function
getage()
}/*}}}*/
class
oldperson
extends
person
}/*}}}*/
oldperson:
:printinfo()
;echo
"**********\n"
;
輸出
[self] name:i am person
[self] age:18
[static] name:i am old person
[static] age:65
#3 self和static分析
因為oldperson 繼承 person。oldperson 覆蓋了$name屬性和getage()方法。繼承了printinfo()方法。如果繼承的printinfo()方法寫全,oldperson類的**如下:
class
oldperson
extends
person..
....
....
....
....
....
....
....
.繼承的方法...
....
....
....
....
....
.//列印資訊
public
static
function
printinfo()
....
....
....
....
....
....
....
....
....
....
....
....
....
....
....
...}
/*}}}*/
oldperson::printinfo()方法中.self指向了person。但是static指向了它的呼叫這oldperson。所以輸出結果
[self] name:i am person
[self] age:18
[static] name:i am old person
[static] age:65
#4 靜態延遲繫結需要在php5.3版本以後以後才能支援
#5 self和static使用場景
5.1 self可以定義了值或者方法,子類繼承的時候,值不會變化。
5.2 static定義的方法,子類可以過載。類似與模板方法模式。樣例:比如乙個會員父類 class vip
下面兩個子類分別是 超級會員 svip 和 年費會員 yvip 。可以在兩個子類中分別重寫 static usergroup() 方法 或者其他靜態屬性 ,父類中使用延遲靜態繫結這樣可以寫出很優雅的**
PHP延遲靜態繫結
所謂延遲靜態繫結,顧名思義,靜態呼叫時 符號左側的部分的的繫結是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際執行時計算的。class people public static function eat class fatguy extends people public static ...
PHP靜態延遲繫結
php版本5.3起增加了靜態延遲繫結,也稱遲繫結,主要用於在繼承範圍內引用靜態呼叫的類。簡單地來說 static 不再被解析為當前方法所定義的類,而是在實際執行時計算的。意外的繼承 class person class man extends person echo man say person在這...
php的延遲靜態繫結
先說下定義 就是把本類在定義階段固定下來的表示式或者變數,改在執行階段才決定。這個是為了解決下面 的問題才引入的 class parents class child extends parents echo child render parents可以看到我們使用self關鍵字只能夠訪問到該類中的靜...