- ベストアンサー
インクルードされたファイルに書かれている変数を表示させたい
testA.php、testB.phpという2つのファイルがあり、 中身はそれぞれ testA.php・・・ <?php $hensu = "これはテストです"; include ('testB.php'); printtest(); ?> testB.php・・・ <?php function printtest() { print "表示テスト"; print $hensu; } ?> という感じになっています。 これだとtestB.phpはインクルードされるのですが、$hensuが空になって表示されます。 $インクルードした時に$hensuを表示させるにはどうしたら良いのでしょうか? アドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
オブジェクト指向を推進するPHP的にはグローバル変数がイレギュラーですから致し方ないと思います。 >表示カラー設定等が10個以上あり 本当ならclassを作ってウンヌンと言う話に行きたいところですが、配列に格納するのが楽かと思います。 %color = ( 'frame' => "black", 'background' => "white", 'text' => "black", : ); とすれば、関数に渡す変数は1つで済みますね。
その他の回答 (3)
- yatokesa
- ベストアンサー率40% (201/496)
そうですね。PHPではそういうポリシーは無いようです。 先のURLに書かれているとおり、明示的に global宣言をするか、$GLOBALS["hensu"]として参照するかです。 若しくは関数に引数を与える方法ですが、これが最もPHPのポリシーに合致したやり方だと思いますよ。
お礼
ありがとうございます。 そうなんですか・・・PHPって中々難しいですね(>_<;) 一度参考URLとソースを見直して見やすい書き方を研究してみようと思います。
- the845t
- ベストアンサー率33% (246/743)
そういう場合は、引数を利用してはいかがですか? function printtest($hoge){ print "test"; print $hoge; } printtest($hensu);
お礼
ありがとうございます。 現在PHPで掲示板を作っていて、初め一つのファイルで全て済ませようと考えていました。 でも書いていくうちにごちゃごちゃしてきたので、処理を別ファイルにできないかな、と考えたのです。 カラー設定等をweb表示用ファイル(上の例ではtestA.php)に書き、処理ファイル(testB.php)をインクルードするという方法にしようとしたのですが、素人の浅知恵だったせいかとても苦戦している次第です。 引数にしてもいいのですが、表示カラー設定等が10個以上あり、それをfunctionごとに書いて行くのもどうなのかな?と思ったのです。 何かすっきりと記述できる良い方法はないでしょうか? お手を煩わせて申し訳ありませんが、よろしくお願いします。
- yatokesa
- ベストアンサー率40% (201/496)
functionの中はローカル変数になるので$hensuは参照できません。functionの中で global $hensu; と宣言してください。
お礼
ありがとうございます。 この場合、もしtestB.phpにfunctionが複数あったとしたら、functionごとに global $hensu;としなければなりませんか? testA.php側でこれはグローバル変数ですよ、と定義する事はPHPではできないのでしょうか・・・
お礼
なるほど、配列に格納しちゃうんですね。 確かにそれならつらつらと書くよりすっきりしそうです。 ありがとうございました、試してみますね。