• ベストアンサー

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 が表示されます

質問者が選んだベストアンサー

  • ベストアンサー
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

1 が出る理由は include_once の結果が true (正常)だったことを表していると思います。 つまり include_once としての機能は正常に終了したということです。 999 にならないのは、include_once(1回しかインクルードしない)からです。 どういうことかというと1回しかインクルードしないから2回目の include_once 内のコードは実行されていない。 include_once としては2回目のインクルードだから実行せずに終わりました、でもそれは正常なことです、と返しているのではないでしょうか。 ただ include_once は関数の機能ではありません。 通常戻り値を返したいのであれば、function で関数を作成すべきです。 今回のようなプログラムは非常によろしくないプログラムで、単にバグを生むだけになると思いますよ。

guuman
質問者

お礼

ありがとうございます require_onceは返り値がないが include_onceは帰り値をつかえるとマニュアルに書いてあるのですが使ってはいけないのでしょうか? 1回目のinclude_onceを取り除けば999が返るということは使えると思ったのですが。。。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

2回目以降のinclude_once は、読込をしないのだから、return ( ) による返値は無いが、読み込まれているということで 1 を返す ということですね。 返値が必要ということであれば、 (1回目しか実行されないのだから) 一度目の返値を取っておいて、それが既に存在するかどうか調べるというようなことになるんじゃないかと思います。

guuman
質問者

お礼

ありがとうございます 1回目はincludeと同じ動作をするということですね

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.3

再び#1です。 先ほどはマニュアルも見ずに回答してしまったので改めて見てみました。 最新のマニュアルによると include_once に関しては戻り値の説明はありません。 require_once には戻り値があります。 既に読み込まれているときは TRUE が返るとのことです。 include_once http://www.php.net/manual/ja/function.include-once.php require_once http://www.php.net/manual/ja/function.require-once.php 試してみたところ include_once でも require_once でも結果は同じでした。 つまり「なぜ1が返るか」という答えは既に読み込まれているため TRUE が返った、ということになります。 ただ実際に return をして戻り値が返ってしまうので、悪プログラムを作成する前提で使うのでしたらそれで構わないと思います。 その場合は include_once ではなく、include を使えばいいでしょう(何度も呼び出すのであれば)。

guuman
質問者

お礼

ありがとうございます やっぱり使わないほうが無難ですね 極力使わないようにしたいと思います

回答No.2

> include_onceは帰り値をつかえるとマニュアルに書いてあるのですが使ってはいけないのでしょうか? いけない、ということは無いと思います。 ですが、functionを使ったほうが安全では無いでしょうか? 勿論、include_onceで無ければいけない理由が有るのなら別ですが。 include_onceの機能・役割をもう一度見つめなおして、それでもこの方が良いと思うのであればどうぞお使いください。

guuman
質問者

お礼

ありがとうございます いいけど好ましくないということですね 参考にしたいとおもいます

関連するQ&A