从子类分配类变量而不使用构造函数

时间:2012-01-24 15:55:55

标签: php late-static-binding

我正在为项目的数据库访问构建一个轻量级的模型层。 我希望它符合Ruby on Rails的精神。而不是实例化新模型 对象,我想使用单例方法。这是我面临的当前问题:

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);

是否有某种方法可以在类体中分配父级的静态成员?我想要 尽可能避免创建实际的单例类。感谢。

1 个答案:

答案 0 :(得分:2)

您正在寻找的功能称为延迟静态绑定(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);
?>