PHP特性是否是一个很好的解决方案

时间:2012-03-27 20:46:37

标签: php traits

我正在开发一个MVC应用程序,其中使用所有实际模型必须扩展的抽象基类来实现Model。在每个模型中都有一些关于该模型的信息,目前实现为数组,请调用protected static $info。因此,每个模型都有一个不同的$info数组。现在,基类有很多函数使用来自该数组的数据,目前这些函数中的每一个都以下面的示例save()函数开头。

abstract class BaseModel {
    function save(){
        $className = get_called_class();
        $modelInfo = $className::$info;
        /* lots of other stuff */
    }
}

class User extends BaseModel {
    protected static $info = array("tableName" => "tblUsers", etc...)
}

在我的理解中,这可以通过使BaseModel成为特征而不是构造函数来解决,因为当traits定义static属性时,每个继承类都有自己的值。我会将$info数组从Model的实现复制到trait,可能在构造函数中,这样我就可以在BaseModel的所有函数中使用self::info['tableName'] ...

这会是一个好主意吗?

1 个答案:

答案 0 :(得分:6)

最简单,最合适的工具是使用late static binding

function save(){
    $modelInfo = static::$info;
    /* lots of other stuff */
}