[ PHP ] abstract static 宣言は使用できません

Pocket

今は昔な情報となりますが PHP では、abstract static 宣言を行うことはできなくなりました。古いソースコードはインターフェースを使った代替手段に書き換える必要があります。

スポンサーリンク


abstract static 宣言は、PHP 5.2.0 以降で使用できなくなりましたが、本当は PHP 5.0.0 の時点で使用できなくなるはずだったようです。

PHP マニュアルより引用

abstract static なクラス関数が削除されました。 ちょっとした手違いで、PHP 5.0.x および 5.1.x では abstract static な関数をクラス内で定義できてしまっていました。PHP 5.2.x では、 これはインターフェイス内でのみ定義できるようになりました。

NG となる abstract static 宣言を行うサンプル
abstract class ParentClass
{
    // abstract static で抽象メソッドを宣言する
    abstract static public function func();
}

class ChildClass extends ParentClass
{
    // 抽象メソッドの実装
    static public function func()
    {
        return 'abstract static';
    }
}

echo ChildClass::func();
出力されるエラーメッセージ

Strict standards: Static function ParentClass::func() should not be abstract in ・・・
abstract static

代替手段 ( インターフェースを使う )

代替手段としてはインターフェースを使って実装することになります。

// インターフェースで static メソッドを宣言する
interface AbstractInterface
{
    static public function func();
}

class ImplementsClass implements AbstractInterface
{
    // インターフェースの実装
    static public function func()
    {
        return 'abstract static';
    }
}

echo ImplementsClass::func();

// 表示結果
//------------------------------------------------
// abstract static
参考

PHP マニュアル:下位互換性のない変更点(5.1.x → 5.2.x)

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>