2012-03-27 71 views
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'] ...

这是个好主意吗?

回答

6

作业的最简单和最合适的工具是使用late static binding

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

大,这个工程。我感到有点惭愧,我没有自己想出这个。谢谢! – 2012-03-28 07:26:03

+0

@Lex:其实你确实想到了它,你的代码和后期静态绑定在幕后做的事情完全一样。 ;) – Jon 2012-03-28 07:29:11

相关问题