2

lプロジェクトのデータベースアクセス用に軽量のモデルレイヤーを構築しています。RubyonRailsの精神でそれを実現したいと思います。新しいModelオブジェクトをインスタンス化する代わりに、シングルトンアプローチを使用したいと思います。これが私が直面している現在の問題です:

class BaseModel {
    public static $name;
    public static function get($id) {
        echo "SELECT * FROM ". self::$name ."s WHERE ". self::$name .' = '.$id;
    }
}

class Customer extends BaseModel {
    //parent::$name = 'customer'; => ERROR
}

$c = Customer::get(4);

クラス本体で親の静的メンバーを割り当てる方法はありますか?可能であれば、実際のシングルトンクラスを作成することは避けたいと思います。ありがとう。

4

1 に答える 1

2

探している機能はLateStaticBinding(LSB)と呼ばれ、ありがたいことに5.3でPHPに導入されました。あなたはここでそれについて読むことができます:http://php.net/manual/en/language.oop5.late-static-bindings.php

これは、LSBを使用して書き直されたコードです。

<?php

class BaseModel {
    public static $name;
    public static function get($id) {
        echo "SELECT * FROM ". static::$name ."s WHERE ". static::$name .' = '.$id;
    }
}

class Customer extends BaseModel {
    public static $name = 'customer';
}

$c = Customer::get(4);
?>
于 2012-01-24T16:12:41.290 に答える