dポイントプレゼントキャンペーン実施中!

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

A 回答 (4件)

1 が出る理由は include_once の結果が true (正常)だったことを表していると思います。


つまり include_once としての機能は正常に終了したということです。
999 にならないのは、include_once(1回しかインクルードしない)からです。
どういうことかというと1回しかインクルードしないから2回目の include_once 内のコードは実行されていない。
include_once としては2回目のインクルードだから実行せずに終わりました、でもそれは正常なことです、と返しているのではないでしょうか。

ただ include_once は関数の機能ではありません。
通常戻り値を返したいのであれば、function で関数を作成すべきです。
今回のようなプログラムは非常によろしくないプログラムで、単にバグを生むだけになると思いますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/23 14:22

2回目以降のinclude_once は、読込をしないのだから、return ( ) による返値は無いが、読み込まれているということで 1 を返す


ということですね。
返値が必要ということであれば、
(1回目しか実行されないのだから)
一度目の返値を取っておいて、それが既に存在するかどうか調べるというようなことになるんじゃないかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/24 05:59

再び#1です。


先ほどはマニュアルも見ずに回答してしまったので改めて見てみました。
最新のマニュアルによると include_once に関しては戻り値の説明はありません。
require_once には戻り値があります。
既に読み込まれているときは TRUE が返るとのことです。

include_once
http://www.php.net/manual/ja/function.include-on …

require_once
http://www.php.net/manual/ja/function.require-on …

試してみたところ include_once でも require_once でも結果は同じでした。
つまり「なぜ1が返るか」という答えは既に読み込まれているため TRUE が返った、ということになります。

ただ実際に return をして戻り値が返ってしまうので、悪プログラムを作成する前提で使うのでしたらそれで構わないと思います。
その場合は include_once ではなく、include を使えばいいでしょう(何度も呼び出すのであれば)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/23 16:23

> include_onceは帰り値をつかえるとマニュアルに書いてあるのですが使ってはいけないのでしょうか?


いけない、ということは無いと思います。
ですが、functionを使ったほうが安全では無いでしょうか?

勿論、include_onceで無ければいけない理由が有るのなら別ですが。
include_onceの機能・役割をもう一度見つめなおして、それでもこの方が良いと思うのであればどうぞお使いください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/23 15:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!