ページビルダーをOOPスタイルで書き直しています。これは実用的です。なぜなら、すべての設定ページにコードを記述する必要はなく、パラメータを指定してそれを構築できるからです。サブフォームOOPスタイルを動的に作成する
私はクラスを作成し、コンストラクタを定義してビルドを開始しましたが、私は障害にぶつかりました。クラスは次のとおりです。
class SettingsSubageBuilder {
private $subpage_name;
private $html_array;
public function __construct($subpage_name, $html_array) {
$this->subpage_name = $subpage_name;
$this->html_array = $html_array;
}
public function create_submenu_pages() {
$page_hook = 'mytheme_theme' . strtolower(str_replace(' ', '_', $this->subpage_name));
add_submenu_page('theme_settings', $this->subpage_name, $this->subpage_name, 'edit_theme_options', $page_hook, 'mytheme_'.strtolower(str_replace(' ', '_', $this->subpage_name)).'_render_page');
}
public function mytheme_'.strtolower(str_replace(' ', '_', $this->subpage_name)).'_render_page() {
}
}
submenu pagesが追加されました。しかし、呼び出し可能な関数の問題があります。
私のサブメニューページの[ヘッダー設定]に名前を付けます。
$page_hook
はmytheme_theme_header_settings
になり、呼び出し可能な関数はmytheme_header_settings_render_page
になります。
呼び出し可能関数を作成しようとすると、明らかに問題があります。
public function mytheme_'.strtolower(str_replace(' ', '_', $this->subpage_name)).'_render_page() {
}
は動作しません - 私は、どのように私はPHPでコンストラクタに依存メソッドを作成することができます
Parse error: syntax error, unexpected ''.strtolower(str_replace('' (T_CONSTANT_ENCAPSED_STRING), expecting '(' in /theme-settings/theme-settings.php on line 138
を取得しますか?
あなたは動的にここに関数名を作成する必要はありません。オブジェクトの中にすべてを保持すると( '$ this 'で変数と関数を参照すると)、すべてのインスタンスは他のインスタンスから分離されます。 –
私が正しく理解していれば、 'render_page'という関数を作成することができます。このオブジェクトのインスタンスを別々に作成しても、互いに独立してレンダリングされますか? 'add_submenu_page()'関数に衝突することはありませんか? –
それは正しいです。インスタンスで変数の値を共有する場合は、静的として明示的に宣言する必要があります。 –