2
我正在一个MVC应用程序中使用抽象基类实现模型,所有实际模型必须扩展。在每个模型中都有关于该模型的一些信息,目前作为一个数组实现,让我们调用protected static $info
。所以,每个型号都有不同的$info
阵列。现在,基类有很多使用该数组的数据的函数,并且此刻每个函数都以类似下面的示例save()函数开始。将PHP的特点是一个很好的解决方案
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']
...
这是个好主意吗?
大,这个工程。我感到有点惭愧,我没有自己想出这个。谢谢! – 2012-03-28 07:26:03
@Lex:其实你确实想到了它,你的代码和后期静态绑定在幕后做的事情完全一样。 ;) – Jon 2012-03-28 07:29:11