**[[質問箱3/513]] [#g9196873] #author("2018-03-11T18:56:47+09:00;2009-03-08T22:57:57+09:00","","") **[[質問箱/3513]] [#g9196873] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|pluginでメモリ上に変数を作りたい。| |~バージョン|1.4.7| |~投稿者|[[moramora]]| |~状態|完了| |~投稿日|&new{2006-10-14 (土) 23:33:56};| ***質問 [#u61fd0c8] プラグイン呼び出し時の計算結果を 再呼び出し時にできるだけ高速に呼び出すため メモリ上に変数を格納したいと思ったのですが、 たとえば以下のように記述しても毎回同じ値しか 出力されません。 メモリ上に変数を格納するにはどのように 記述すればよいのでしょうか。 global $a; $a = 1; function plugin_a_convert() { global $a; $a = $a + 1; //< 呼び出しごとにインクリメントされてほしい. return convert_html(print_r($a, true)); } よろしくお願いします。 ***回答 [#dbf9832b] -まずはPHPの動作についての基本を学ばれるべきでしょう。また、これはPukiWikiではなくPHPについての問題なので、ここで質問するのは適当ではありません。続きはしかるべきコミュニティでどうぞ。 -- &new{2006-10-15 (日) 00:18:51}; - しょうもない質問でうっとうしいのはわかるんですが、せめてヒントだけでもほしかったです。。。ステートレスで動作するから無理なんですかね? -- &new{2006-10-15 (日) 01:08:59}; - あれ、だめでしたっけ?関数の外の部分を function plugin_a_init() 内に書くとか別ファイル(pukiwiki.ini.php) に書くとかするとどうなりますか?(めんどくさいので私は調査しません) -- &new{2006-10-15 (日) 05:04:43}; - static にしてみてはどうでしょうか :) -- [[teanan]] &new{2006-10-15 (日) 10:25:47}; - コメントありがとうございます!m(_ _)m しかし、plugin_a_initにglobal $aを記載する方法、pukiwiki.ini.phpに記載する方法、plubin_a_convert内で$aをstaticに変更する方法、set_plugin_messages()を利用する方法などを試してみたのですが、同じ結果でした。。。とりあえずうまい方法が見つかるまでファイルに書き出してしのぐことにします(>_<) -- [[moramora]] &new{2006-10-15 (日) 13:47:12}; - 関数の外の部分を消して、こういうのではだめですか? function plugin_a_convert() { static $a = 0; // 最初は0 、でも直後でプラス1 するので表示は1 から $a = $a + 1; return convert_html(print_r($a, true)); } コメントプラグインなどで、アンカーID が重ならないように、こんな感じの処理をしているんですが。 -- &new{2008-03-02 (日) 13:49:19}; - 上のが正解。[[PHP: 変数のスコープ>http://www.php.net/manual/ja/language.variables.scope.php]] や、既存のプラグインの処理を見てください。 -- &new{2009-03-08 (日) 22:57:57}; -- 状態を「完了」にします。 -- &new{2009-03-08 (日) 22:57:57}; //#comment