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