* 設定用変数の統合 [#h2d32f9c]

- ページ: [[BugTrack2]]
- 投稿者: [[->./]]
- 優先順位: 普通
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2016-02-09 (火) 02:29:27
- バージョン: 

** メッセージ [#s7c54a03]
#setlinebreak
現在、pukiwiki.init.phpにおいて多数の変数が定義、初期化されています。
しかし、それぞれが独立した変数であり、別ファイルの関数で使うためすべてをglobalでパブリック化する必要があります

なので、設定用に連想配列を設けてそれに一括設定してみてはいかがでしょうか

** 参考: 他アプリ/フレームワーク [#me8711ee]

- WordPress - wp-config.php
-- https:// wpdocs.osdn.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86
- MediaWiki - DefaultSettings.php / LocalSettings.php
-- https:// www.mediawiki.org/wiki/Manual:Configuration_settings/ja
- DokuWiki - dokuwiki.php / local.php
-- https:// www.dokuwiki.org/ja:config
- FuelPHP - config.php
-- http:// fuelphp.jp/docs/1.7/general/configuration.html
- CodeIgniter - config.php
-- http:// codeigniter.jp/user_guide_ja/libraries/config.html
- Ethena - (application)-ini.php
-- http:// www.ethna.jp/ethna-document-dev_guide-app-config.html
- Symfony - config.php
-- http:// docs.symfony.gr.jp/symfony2/reference/configuration/framework.html
- Laravel - app.php
-- http:// readouble.com/laravel/5/0/dev/ja/configuration.html


** 設計案A(umorigu) [#l5437907]

*** 設計 [#v4c195fa]

- PukiWikiConfig クラス: 設定値をfunctionの戻り値として返す
- PukiWikiConfigSetter クラス: 設定値をpublic fieldとして保持する。PukiWikiConfig の初期化をするためのクラス
- config() 関数: PukiWikiConfig クラスのインスタンスを返す
-- 最初の一度だけPukiWikiConfigSetterにより初期化を行う
-- config($setter) を呼び出した時点で内部PukiWikiConfigインスタンスが保持する値は固定され、その後書き換える手段はない

設定時:

 $setter = PukiWikiConfigSetter();
 $setter->page_title = 'Sample Title';
 ...
 config($setter);

利用時:

 $config = config();
 echo $config->page_title();


*** 実装例 [#c6e41c6f]

- [[osdn.jp:users/umorigu/pf/pukiwiki15/scm/commits/35ec9f5866c6056875088363037570d3d01c2b25]]
- [[osdn.jp:users/umorigu/pf/pukiwiki15/scm/commits]]

--------
- いいですね。設定値がglobal変数として別個に存在するのは使いにくいと思っていました。一番問題になるのは過去互換性です。(今の構成をベースに作られているプラグインをバージョンアップしても動くようにしたい。) -- [[umorigu]] &new{2016-02-09 (火) 23:15:57};
- あと、プラグイン側で設定値(global変数)を自由に書き換えられる問題も一緒に解決できるといいですが… 単純に連想配列だとここの不味さは残りそうです -- [[umorigu]] &new{2016-02-09 (火) 23:16:54};
- 既存変数について過去互換は保った状態で新規追加の設定値は新しい仕組みを使うのでもいいかもしれません。他のアプリでうまく解決している事例があるでしょうか? -- [[umorigu]] &new{2016-02-09 (火) 23:18:01};
- 過去互換の為には互換用ファイルを別途用意して同じ値を再定義するって手もある -- [[->./]] &new{2016-02-10 (水) 02:57:33};
- 将来的にそのファイルを読み込まなくして行けば互換性を保持したまま移行ができる -- [[->./]] &new{2016-02-10 (水) 03:00:25};
- 「互換用ファイルを用意して同じ値を再定義」ってどういうイメージでしょうか?実装例などあると助かります -- [[umorigu]] &new{2016-02-10 (水) 09:20:29};
- [[開発日記/2004-10-03#n4210471]]の「リンク設定に関する情報を(複数の変数ではなく)一つの配列に格納する様に修正」のように、lib/html.phpのcatbody()で定義している$_LINK と互換用で参照定義している
 // Compat: Skins for 1.4.4 and before
以下の$link_XXX 定義群みたいなかんじになるのかな? --  &new{2016-02-10 (水) 21:02:23};
- PukiWikiConfigクラスを作ってglobal変数(page_title, modifier, modifierlinkを無くしてみました。これだとglobal変数なくせますね。global変数書き換え問題も解決しています。過激! [[osdn.jp:users/umorigu/pf/pukiwiki15/scm/commits/35ec9f5866c6056875088363037570d3d01c2b25]] [[osdn.jp:users/umorigu/pf/pukiwiki15/scm/commits]] -- [[umorigu]] &new{2016-02-13 (土) 01:56:38};
- 個人的に結構気に入ったんですが1.5.1に入れるには影響が大きすぎますね。導入するにしても1.5.2以降になりますが、この設計(案A)への意見を募集します -- [[umorigu]] &new{2016-02-13 (土) 02:01:12};
- 少々話は外れてしまいますが、よく利用されてるプラグインや、本体に含まれるプラグインの拡張版を先に取り込んでしまうのも影響範囲を小さくする為の1つの解決方法かもしれません -- [[rondo]] &new{2016-02-13 (土) 08:26:19};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.053 sec.

OSDN