0

我有多个 php 类

// a Base class
abstract class Base_Page {
   protected static $config = array(
      'status' => 'int',
   );
}
// an inheriting class
class Page extends Base_Page{
   protected static $config = array(
      'title' => 'varchar',
      'description' => 'text',
);
// and one more level of inheritance
class Page_Redirect extends Base_Page {
   protected static $config = array(
      'href' => 'http://domain.com',
   );
}

现在我想这样做:

$page_redirect = new Page_Redirect();
$page_redirect->getConfig(); // which i assume to be implemented (this is my problem)
// should return:
// array(
//    'status' => 'int',
//    'title' => 'varchar',
//    'description' => 'text',
//    'href' => 'http://domain.com',
// )

由于变量被扩展类覆盖,因此不知道如何实现这一点。感谢您的关注。

4

2 回答 2

0

您不能对裸属性执行此操作。使用方法会更好:

abstract class Base_Page {
   protected function getConfig() {
       return array('status' => 'int');
   }
}

// an inheriting class
class Page extends Base_Page{
   protected function getConfig() {
       return array(
          'title' => 'varchar',
          'description' => 'text',
       ) + parent::getConfig();
   }
}

// and one more level of inheritance
class Page_Redirect extends Base_Page {
   protected function getConfig() {
       return array(
          'href' => 'http://domain.com',
       ) + parent::getConfig();
   }
}

当然,现在您已经失去了静态获取配置的能力,但这很可能无关紧要。如果是这样(即您需要知道配置而手头没有实例,并且一时兴起创建一个实例是没有意义的),那么代码需要进一步重构。

于 2012-10-03T12:21:22.510 回答
0
<?php

// a Base class
abstract class Base_Page {

    protected static $config = array(
        'status' => 'int',
    );

}

// an inheriting class
class Page extends Base_Page {

    protected static $config = array_merge(
        parent::$config,
        array(
            'title' => 'varchar',
            'description' => 'text',
        )
    );

}

尝试这样的事情。

于 2012-10-03T12:26:49.837 回答