我正在为项目的数据库访问构建一个轻量级的模型层。 我希望它符合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);
是否有某种方法可以在类体中分配父级的静态成员?我想要 尽可能避免创建实际的单例类。感谢。
答案 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);
?>