ここから本文です

printは結果を返す。というのがよくわかりません

pornolover0818mk2さん

2012/1/700:44:10

printは結果を返す。というのがよくわかりません

$out = print("Helloworld"); はきちんと出力されますが
$out = echo"Helloworld"; は出力されません

それはprintが結果を返すことができるからで、
このときの動作は変数$outに代入してprintで出力したのだ・・・

と、あるホームページに解説が載っていたのですが
よくわかりません。

どういう順序で画面にHelloWorldが出力されるのでしょうか?

printは常に返り値は1ではないんですか?
解説をおねがいします^^;

閲覧数:
324
回答数:
2

違反報告

ベストアンサーに選ばれた回答

2012/1/701:15:16

> printは常に返り値は1ではないんですか?
http://jp.php.net/manual/ja/function.print.php
ここにあるように、常に1。

関数というのは、基本的には返り値を返す以外には何もしない。
しかし、print()など一部の関数は例外的に、返り値を返す以外になんらかの処理を行う(プログラミング用語で副作用 side effect と呼ぶ)。ファイルへの書き込み、画面への出力など、外界に何らかの作用を及ぼすものが多い。副作用という名前だが、このような関数はむしろ「副作用」のほうを目的として呼び出すことが多い。
print()は1を返し、(副作用として)画面などに文字を出力する。

副作用を持つ関数が返す値は、関数によって違う。print()のように「いつも同じ物を返す」関数もあるし、「ファイルをオープンして、開かれたファイルを示す特殊な変数を返す」fopen()のような関数もある。「ディレクトリを作成し、成功した場合にtrue、失敗した場合にfalseを返す」mkdir()のように、結果を返す関数も多い。

外界ではなく、プログラム内で副作用を引き起こす関数もある。
配列をランダムに並べ替える関数shuffle()は、引数として指定した配列を直接書き換える。つまり
$ary = array(1,2,3);
shuffle($ary);
とすると、$aryがシャッフル済みの状態になる。

順序は、$outへの代入の前に画面出力が起きる。
$out = 1+3;
で、$outへの代入の前に1+3が計算されるのと同じ理屈だね。1+3を計算して4という結果を導いたり、print("helloworld")を処理して(画面に出力すると同時に)1という返り値を導いたりする処理のことを、式を「評価する」と言う。
「1を返す」のと「画面に文字を出力する」は、論理的には同時に発生する。実際は恐らく後者がわずかに先だろう、まあどちらが先か問題になる事は無いと思うが。

質問した人からのコメント

2012/1/7 01:30:20

関数の副作用の話、それと式の評価の話、まるで教科書のようにとてもわかりやすかったです!ありがとうございます。おかげでC言語のときからあったわだかまりのようなものが払拭されました。ご丁寧な解説ほんとうにありがとうございました

ベストアンサー以外の回答

1〜1件/1件中

jtaka451さん

2012/1/700:59:13

> $out = print("Helloworld"); はきちんと出力されますが
↑$outにprintが返す値(1)が代入されるので構文的に正しく、ちゃんと機能するってことで、
> $out = echo"Helloworld"; は出力されません
↑形式として$outに代入する式になっているけど、echoが値を返さないから構文としておかしくエラーが出る、ってことだと思うけど。
http://nyx.pu1.net/reference/extra/echo_print.html

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。