php支援物件導向已經很多年了,物件導向最基礎的就是類和類的例項化,使用類的時候需要先例項化一下,才能呼叫類的一些方法或者訪問類的屬性,但是實際的開發過程中,很多時候有一些需要是不用例項化的就呼叫的,例如help工具函式的類,本身help裡面的函式沒有什麼關聯,如果每次呼叫都要例項化一次的話,實在是沒有這個必要,還有一些config的類也是如此,因此需要靜態的方法,直接通過類名呼叫的就行了,因此靜態方法也稱作類方法
靜態方法也不是萬能的,有其自身的一些侷限性,例如,靜態方法不能使用$this呼叫類的方法或者屬性(使用self::非靜態方法,系統會將這個方法轉換為靜態方法),這就使得,如果乙個靜態方法裡面又需要調其他的方法,其他的方法也需要寫成靜態方法,當這個呼叫鏈比較複雜了的時候,最後類裡面的方法可能都要變成靜態方法了,雖然都使用靜態方法來寫,好像也沒什麼問題,我也找不出什麼理由來反駁這種做法的壞處,畢竟好像速度和記憶體的占用還提公升了。但是這樣終究是有違物件導向的理念,拓展性和耦合性都有問題,具體怎麼看,看各人的理解了。
非本類的呼叫,這裡就不多分析了,使用比較簡單。這裡筆者在實際開發過程中,經常遇到self::靜態防範和static::靜態方法的呼叫情況,起初我也比較迷茫,不知道這是為啥,後面經過查閱一些資料才明白其中的不同,廢話不多說,上**:
class testclass
public function runtest()
}class test1class extends testclass
}$class = new testclass();
$class->runtest();
$class = new test1class();
$class->runtest();
exit;
輸出:test
test
使用self的時候,都是呼叫的是父類的方法
class testclass
public function runtest()
}class test1class extends testclass
}$class = new testclass();
$class->runtest();
$class = new test1class();
$class->runtest();
exit;
輸出:test
test1
使用self的時候,父類的呼叫的是父類的方法,子類的呼叫,呼叫的是子類的方法
1,簡單來說,self的呼叫,都是呼叫該類自己的方法,static的呼叫,先判斷呼叫方是否有該方法,有就呼叫自己的方法,沒有才會呼叫父類的方法。
2,很多時候static會比self更好用,因為static已經包含了self的功能,而且提供了更強的拓展性,建議使用static,但是如果確定只呼叫自己的,不能被子類的方法影響,那麼還是用self呼叫
PHP中json encode的使用心得
假設有這麼乙個url url 你好 data url url echo json encode data 得到這樣的輸出 首先發現中文經過encode之後變成了16進製制,這不是亂碼,只是單純現實方法變了,因為只需要直接通過反序列化就能得到原結果,如下 jsonstr data json decod...
Log4php 使用心得
使用log4php 記錄系統日誌 1 自動攔截php報出的錯誤,寫日誌 2 手動列印錯誤 set error handler capturenormal e error e parse set exception handler captureexception register shutdown ...
靜態路由的使用心得 M層
最近在測試一種場景,不同路由下終端裝置進行通訊,要進行通訊,要麼在終端裝置上加靜態路由,要麼在路由上加靜態路由。雙網絡卡的伺服器,不能在兩塊網絡卡上同時設定閘道器,其中一塊不設定閘道器,加上靜態路由,windows伺服器 route add p 10.10.10.0 mask255.255.255....