plugin_<プラグイン名>_init が複数回呼ばれている

  • ページ: BugTrack2
  • 投稿者: sonots
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2007-06-15 (金) 15:50:00
  • バージョン: 1.4.5-1.4.7

メッセージ

plugin_<プラグイン名>_init 関数群は pukiwiki 一度の実行(セッション)につき、それぞれ一度だけ実行されるのが仕様だと思うのですが、現在は各プラグインが呼ばれるごとにそれぞれ毎回実行されています。

調べた所 cvs-raw:lib/plugin.php?r1=1.1&r2=1.2 の時点で array_key_exists が isset に変更され、NULL が値になった際の挙動が変わってしまっています。 これは BugTrack/779 クリンナップのまとめ array_key_exists() => isset() のところで NULL 値が格納された場合を見逃して修正してしまったのではないかと思います。

元に戻す修正パッチです。

--- org.orig/lib/plugin.php     2005-07-03 10:16:23.000000000 -0400
+++ org.dev/lib/plugin.php      2007-06-15 02:40:09.937500000 -0400
@@ -72,7 +72,7 @@
 {
        static $checked = array();

-       if (isset($checked[$name])) return $checked[$name];
+       if (array_key_exists($name, $checked)) return $checked[$name];

        $func = 'plugin_' . $name . '_init';
        if (function_exists($func)) {

  • コメントありがとうございます。ご指摘の通りかと思います。ここで要求されている仕事をこなすのは、 array_key_exists() を使うのが最もスマートだと思います*1。同じ事をしない様、コメントでもそれなりに強調しておきました。ついでに、現状は init 関数が何を返してきたとしても、そのデータをそのまま抱え込もうとする作りになっていたので直しました。いかがでしょうか -- henoheno 2007-06-15 (金) 22:49:05
  • ごくろうさまです。良いと思います。完了にしておきました。 -- sonots 2007-06-16 (土) 01:20:28
  • 確認ありがとうございます。しかし、NULLかどうかをチェックする処理にそもそも存在意義が無い事に気づきましたので、結局isset()で良くなりました。大分スマートになったかと思いますがどうでしょうか・・・ -- henoheno 2007-06-17 (日) 23:34:27
  • こちらは最終的に、理解するために必要なステップをさらに縮めた状態にしました。一応完了としておきます。お知らせいただきありがとうございました。 -- henoheno 2007-06-24 (日) 23:12:53

*1 is_set() にこだわる路線で static 変数 $positive, $negative を使い分ける案も考えましたが、冗長でした

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-24 (日) 23:12:03
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.182 sec.

OSDN