我正在与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());

===============>>#1 票数:1

看一些PHP OOP教程。

没有一种制造方法。 接下来是一个。 例如,在Java中通常为每个属性创建一个get / set方法。 这样,您可以从任何子类访问它,而无需使用protected关键字,也不会使其变得清晰。

  • 在父类上创建一个getTableName()方法。
  • 在子类的实例上,可以调用$ this-> getTableName()方法,因为它是从基类继承的。

如果您在父类上具有MyMethod()并想在子类中以其他方式实现它,则只需在子类中创建MyMethod()并使用getTableName()即可获取表名属性。

如果您使用subclass.MyMethod()实现需要调用parent.MyMethod(),则使用parent :: MyMehtod()(http://www.php.net/manual/zh/keyword.parent.php)

===============>>#2 票数:0

您需要将您的create方法设为非静态,或者将table_name变量设为静态。

如果需要静态某些方法,则从php 5.3开始,您可以在静态继承的上下文中使用后期静态绑定来引用被调用的类。

  ask by azz0r translate from so

未解决问题?本站智能推荐: