升級PHP到5.4發現開發的程序提示:Static function Dataaccess::get() should not be abstract
查詢資料后發現從PHP 5.2開始,不再允許同時使用abstract static 修飾一個抽象類的抽象方法。也就是說,PHP不再支持抽象靜態方法,繼續使用,將導致E_STRICT錯誤。
注:E_STRICT指的是自PHP5起引進了新常量 E_STRICT,其值為 2048。它提供了對用戶代碼的協同性和向前兼容性的運行時 PHP 建議,有助于使用戶保持最新和最好的編程風格。例如在使用已過時的函數時 STRICT 信息會提出警告。
例如下面的這段代碼:
abstract class Dataaccess
{
abstract static function get($params);
}
運行會導致錯誤:Static function Dataaccess::get() should not be abstract
使用抽象靜態方法作用是強制繼承該抽象類的子類去實現一個同名靜態方法。
在 PHP Manual 中(http://www.php.net/manual/zh/migration52.incompatible.php),有這樣一段文字介紹:Dropped abstract static class functions. Due to an oversight, PHP 5.0.x and 5.1.x allowed abstract static functions in classes. As of PHP 5.2.x, only interfaces can have them.
可以得知,我們可以繼續使用接口 Interface 來進行子類實現的約束。
改寫上面的代碼如下:
interface Iget {
static function get($params);
}
abstract class Dataaccess implements Iget
{
}
這樣我們就達到了繼承Dataaccess 的子類也必須要實現Iget中的全部方法,從而保證了子類中必須要實現 Iget() 靜態方法。
原文轉自:http://blogread.cn/it/article/6725