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',
   );
}

今idはこれをしたいです:

$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 に答える