我正在与PHP类继承和范围问题作斗争。基本上我有一个基类,有一堆有用的方法(创建,保存,加载),开发人员当前传递一个table_name。我想创建一堆模型类,这些类是空的但扩展和放大继承基类,并且可以使用被调用的同名方法而不是基类版本。
下面的代码我很难从模型类的静态方法中获取table_name,有什么建议吗?
class Model_Baseclass {
private $table_name;
public static function create($fields) {
$table_name = //self::table_name - parent::table_name - const $table_name
if ($table_name == NULL) {
throw new exception('You must specify a table.');
}
}
}
class Model_Content_Gallery extends Model_Baseclass {
public $table_name = 'Content_Gallery';
}
$old = Model_Baseclass::create(array('table_name' => 'Content_Gallery'));
$new = Model_Content_Gallery::create(array());
答案 0 :(得分:1)
看看一些PHP OOP教程。
没有一种方法可以制造东西。接下来是一个。例如,在Java中,通常为每个属性创建一个get / set方法。这样,您可以从任何子类访问它,而无需使用protected关键字并获得清晰度。
如果您在父类上有MyMethod()并希望在子类中以不同的方式实现它,只需在子类中创建MyMethod()并使用getTableName()可以获取表名属性。
如果你子类.MyMethod()实现需要调用parent.MyMethod()然后使用parent :: MyMehtod()(http://www.php.net/manual/en/keyword.parent.php)
答案 1 :(得分:0)
您需要将create
方法设为非静态,或将table_name
变量设为静态。
如果你需要静态的某些方法,那么从php 5.3开始,你可以使用late static binding在静态继承的上下文中引用一个被调用的类。