【问题标题】:Assigning a class variable from subclass without constructor从没有构造函数的子类分配类变量
【发布时间】:2012-02-17 21:03:48
【问题描述】:

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

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

【问题讨论】:

    标签: php late-static-binding


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这正是我要找的!