PHP特质会是一个很好的解决方案

我正在开发一个MVC应用程序,在该应用程序中,使用抽象基类来实现模型,所有实际模型都必须扩展。 在每个模型中都有关于该模型的一些信息,目前以数组的形式实现,让我们调用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作为特征而不是构造函数来解决,因为当特征定义static属性时,每个继承类都有自己的值。 我会从模型的实现复制$info数组到特征,可能在构造函数中,这样我就可以在BaseModel中的所有函数中使用self::info['tableName'] ...

这是个好主意吗?


最简单和最合适的工具是使用晚期静态绑定:

function save(){
    $modelInfo = static::$info;
    /* lots of other stuff */
}
链接地址: http://www.djcxy.com/p/69377.html

上一篇: Would PHP traits be a good solution

下一篇: How extends User entity of FOSUserBundle?