CMS のモジュール システムを作成しているときに、(可能であれば) より良い方法で解決したい問題に出くわしました。
抽象クラスがあります(簡略化):
abstract class aModule {
function __construct() {
include(dirname(__FILE__).'/resources/content.php');
}
}
このクラスの子をインスタンス化すると、次のようになると予想されます。
class SomeModule extends aModule {
}
$sm = new SomeModule();
FILE定数がSomeModuleクラスファイルの場所になるためのものですが、代わりに親のものを取り、もちろんインクルードは機能しません。*注意: どちらのクラス ファイルも外部の ModuleManager エンジンから含まれているため、$_SERVER['SCRIPT_FILENAME'] を使用することはできません。
私は醜い方法で問題を解決し、次のような抽象クラス コンストラクターを作成しました。
function __construct($fileLoc) {
include(dirname($fileLoc).'/resources/content.php');
}
したがって、モジュールを機能させるには、独自のコンストラクターを持たせる必要があります。
function __construct() {
parent::__construct(__FILE__);
}
これにより、モジュールを作成する人は誰でも、モジュールクラス定義にこの正確なコンストラクターを含める必要があり、私が学んだ限りでは、プログラミングの繰り返しは悪いことです。
それで、私の抽象クラスが子クラスのファイルの場所を知る方法はありますか、それともこれが唯一の方法ですか?