2

l 我正在为我的项目的数据库访问构建一个轻量级的模型层。我希望它具有 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);

有没有办法在类体中分配父类的静态成员?如果可能的话,我想避免创建一个实际的单例类。谢谢。

4

1 回答 1

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);
?>
于 2012-01-24T16:12:41.290 回答