- ベストアンサー
インクルードされたファイルに書かれている変数を表示させたい
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を表示させるにはどうしたら良いのでしょうか? アドバイスをお願いします。
- kamay
- お礼率73% (361/491)
- PHP
- 回答数4
- ありがとう数5
- みんなの回答 (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ではできないのでしょうか・・・
関連するQ&A
- include先でのinclude元の変数について
度々お世話になっています。 include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。 include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。 test.php <?php $test = "いけるかな?"; include "include.php"; ?> include.php <?php echo $test; ?> 結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか? また、このような動作を期待している理由としてはPHP部分とHTMLを分離させたいと考えており、ユーザ定義関数に変数を引数として渡して、出力処理をユーザ定義関数内で行うという事も考えたのですが、include先に値を渡す事が出来れば、非常にわかりやすく分離出来ると考えたからです。 他に、PHP部分とHTML部分をファイル分けするやり方などありましたら教えて頂けますとうれしいです。
- ベストアンサー
- PHP
- includeしたファイルに変数を持ち込むには?
hoge.phpでセットした変数を、そのあとにincludeした別ファイルに持ち込むことは出来るのでしょうか? 以下のような処理がしたいと思っているのですが、この状態でhoge.phpを実行すると$a=NULLとして処理されてしまいます。 inc.php <?php if ($a=="値") { //TRUE処理 } else { //FALSE処理 } ?> hoge.php <?php $a = "値"; include "./inc.php"; ?>
- 締切済み
- PHP
- PHP 設定ファイルとユーザ定義関数
ある機能を満たすためのライブラリ(lib.php)を作成しました。 このlib.phpはユーザ定義関数の寄せ集めです。 それぞれのユーザ定義関数では、設定ファイル(config.php)に記述されている共通変数を利用します。 このconfig.phpなのですが、ユーザ定義関数ごとにincludeする以外の方法はあるでしょうか? lib.php function one() { $hensu1... $hensu2... ...処理; } function two() { $hensu1... ...処理; } .... config.php $hensu1 = 1; $hensu2 = 2; ... という構成です。 function one,function twoでconfig.phpの変数を利用したいのですが、lib.phpの先頭でinclude "config.php"をしてもfunctionの中では変数のスコープが有効にはならず、 lib.php function one() { include "config.php"; ...処理; } function two() { include "config.php"; ...処理; } としています。 PHP5を使用しています。 function one() { global $hensu1... } としたらよいのでしょうか? どなたかアドバイスいただけますと幸いです。 よろしくお願いします。
- ベストアンサー
- PHP
- 2番目の関数が先に実行されてしまうことってあるの?
javascriptで、testという関数の中で2つの関数を呼び出しています。 testAとtestBではそれぞれデータベースに接続しています。 そこで質問なのですが、testBは、testAの処理が全て終了してから 実行されると思っていたのですが、 testAの処理途中からtestBが実行されることはあるのでしょうか? testAでは、updateのSQLが流れて、testBではinsertのSQLが流れます。それぞれ、処理の最後には、JSPを更新しています。 testAの処理がされずに、testBの処理だけされている状態になることがあるのです。 testBの最後の更新のタイミングが、testAの処理よりも早く終わってしまっているのかなと思いまして。 function test(){ testA(); testB(); }
- ベストアンサー
- JavaScript
- 【PHP】include()で余計な文字まで表示されてしまう
レンタルサーバーのPHP5利用者です。 include() や require() 等で外部の関数を読み込む場合、 <?php ~ ?> の外側に文字があるとそれが変なところで表示されてしまいます。例えば、 <呼び出し側> include(gaibu.php); $msg = write_fc(); print $msg; <外部ファイル側> aaa <?php function write_fc(){ return 'Hello'; } ?> bbb <結果> aaabbbHello といった感じなのですが… この「aaa」「bbb」をさせない方法があれば教えてください。 それとも<?php ~ ?> の外側に文字をかくこと自体非常識なのでしょうか。 お詳しい方、よろしくお願いいたします。
- ベストアンサー
- PHP
- wordpressでincludeが表示されない
wordpressで投稿した際に、phpのincludeファイルを読み込ませようとしています。 wordpressのサイトを sample.com とした場合、 投稿記事に以下を貼り付けています。 <?php include("http://sample.com/include/link.inc");?> サイトはUTF-8、link.incファイルもUTF-8で保存しています。 試しにsample.comの直下にtestフォルダを作って、その中にhtmlファイルを作って 同様に上記のphpのinclude記述をしたところ、ちゃんと表示されました。 ちなみに別のドメインサイト(HTMLサイト)でも上記の記述で表示されました。 wordpressのサイトで表示されないのは何が原因でしょうか?
- 締切済み
- PHP
- include_onceの返り値
gomi.php: <?php $x=10; include_once("gomi1.php"); //test $y=include_once("gomi1.php"); echo "<pre>$x,$y</pre>"; ?> gomi1.php: <?php $x*=2; return 999; ?> としてgomi.phpにアクセスすると 20,1 にが表示されます この1がどのようにしてでるか教えて下さい ちなみに//testの行を削除すると 20,999 が表示されます
- ベストアンサー
- PHP
- includeでファイルが呼び出せない…
ある日突然includeでファイルが呼び出せなくなりました。 include("http://hoge.com/test.php"); 下記のようなエラーになります。 Warning: main(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (is your IPV6 configuration correct? If this error happens all the time, try reconfiguring PHP using --disable-ipv6 option to configure) in……… include("./test.php"); このように相対パスであれば呼び出せます。 なぜなのでしょうか…他のドメインから呼び出せないので困っています…
- 締切済み
- PHP
- htmlファイルのインクルード
htmlファイルのインクルード あるページを複数の別のhtmlファイルを読み込んで構成しようと思っています。 以下がソースなのですがFirefoxでは samplesample テストテスト と表示されるのですが、Internet Explorerでは テストテスト のみが表示されsample.htmlが読み込まれません。 何がいけないのでしょうか。 よろしくお願いします。 [index.html] <html> <head> <title>テストページ</title> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> function my_include(id, file) { document.open(); document.write('<div id="' + id + '"></div>'); document.close(); var options = {}; options.method = "get"; options.asynchronous = true; new Ajax.Updater(id, file, options); } </script> </head> <body> <div id="headers"></div> <script type="text/javascript">my_include("headers","sample.html");</script> テストテスト </body> </html> [sample.html] <head> <title>sampleページ</title> </head> <body> samplesample </body> </html> [バージョン情報] Firefox 3.6.3 Internet Explorer 8 prototype.js 1.6.1
- ベストアンサー
- HTML
- 関数を順番に呼び出したい
一度、ここで質問をしたのですが、わたくしの勘違いで質問締め切ってしましました。 再度の投稿をお許しください。 関数test()の中で、関数testA 、関数testBの順番で呼び出したいと思っています。 関数testAで、return true;を入て、if文でtestAがtrueだったらtestBを呼ぶという処理を行う場合、どこにreturn testを入れたらよいのか迷っています。 またtestAの最後にtestBを入れる場合は、submit()の前も後もどちらに書いても呼ばれないですよね。 ちなみに、testA,testBは以下のような感じです。 testA(){ action="××update××"; method="post"; target="FRAMEH"; submit(); } testB(){ action="××insert××"; method="post"; target="FRAMEH"; submit(); }
- 締切済み
- JavaScript
お礼
なるほど、配列に格納しちゃうんですね。 確かにそれならつらつらと書くよりすっきりしそうです。 ありがとうございました、試してみますね。