PHP初心者です。以下の事柄についてどなたかご教授よろしくお願いいたします。


<pre>
<?php
$language=array("PHP", "JavaScript", "perl");
$big="";

foreach($language as $lang)
{
$big.=$lang.":";
}

echo $big;
?>
</pre>

上記コードの
$big.=$lang.":";
の.=の意味が分かりません。文字列を連結しているのですが、
なぜ=の前にピリオド演算子を
使う必要があるのでしょうか?
愚問かと思いますが、どうぞよろしくお願い申し上げます。

また
echo $big;

 echo $big."¥n";
と書くのと同じ結果になりました。どちらの書き方が正しいのでしょうか?
どうぞよろしくお願い申し上げます。

回答の条件
  • 1人5回まで
  • 登録:2009/05/21 09:01:10
  • 終了:2009/05/21 09:32:59

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/05/21 09:14:13

ポイント30pt

まず最初のご質問ですが、それは「代入演算子」といって、文字列の結合と変数への代入を同時に行うものです。

$big .= $lang . ":";

$big = $big . $lang . ":";

と同じ意味になります。


2番目のご質問ですが

また

echo $big;

 echo $big."¥n";

と書くのと同じ結果になりました。

これは同じ結果にはなりません。

たまたま echo $big; の後に画面出力命令が無いために、そう見えているだけです。

たとえば

echo $big;

echo $big;

と続けて書いた場合と、

echo $big . "¥n";

echo $big . "¥n";

と続けて書いた場合とでは、結果が異なるはずです。

改行の必要性に応じて、どちらかを選ぶようにしてください。

id:gbs01

なるほど。代入演算子。+=や-=と同じですよね。

ありがとうございます。

あと

echo $big;

echo $big;

echo $big . "¥n";

echo $big . "¥n";

との違いも分かりました。

ありがとうございます。

2009/05/21 09:30:04

その他の回答(3件)

id:SOBA No.1

SOBA回答回数65ベストアンサー獲得回数62009/05/21 09:12:32

ポイント20pt

$big .= $lang . ":";  は  $big = $big . $lang . ":";  と同等。

 

$big = $lang . ":"; だと

 1回目のループ:$big = "PHP" . ":";

 2回目のループ:$big = "JavaScript" . ":";

 3回目のループ:$big = "Perl" . ":";

となってしまい、配列内の文字列連結でなくなる。

id:gbs01

あ、なるほどー。良くわかりました。

ありがとうございます。

2009/05/21 09:25:37
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/05/21 09:14:13ここでベストアンサー

ポイント30pt

まず最初のご質問ですが、それは「代入演算子」といって、文字列の結合と変数への代入を同時に行うものです。

$big .= $lang . ":";

$big = $big . $lang . ":";

と同じ意味になります。


2番目のご質問ですが

また

echo $big;

 echo $big."¥n";

と書くのと同じ結果になりました。

これは同じ結果にはなりません。

たまたま echo $big; の後に画面出力命令が無いために、そう見えているだけです。

たとえば

echo $big;

echo $big;

と続けて書いた場合と、

echo $big . "¥n";

echo $big . "¥n";

と続けて書いた場合とでは、結果が異なるはずです。

改行の必要性に応じて、どちらかを選ぶようにしてください。

id:gbs01

なるほど。代入演算子。+=や-=と同じですよね。

ありがとうございます。

あと

echo $big;

echo $big;

echo $big . "¥n";

echo $big . "¥n";

との違いも分かりました。

ありがとうございます。

2009/05/21 09:30:04
id:GoldenDawn No.3

GoldenDawn回答回数426ベストアンサー獲得回数812009/05/21 09:21:44

ポイント20pt

http://php.benscom.com/manual/ja/language.operators.string.php

やってみれば分かりますが、

$big = $lang.":" ;

ピリオド無しにすると出力結果は

perl:

になります。

$big .= $lang.":" ;

$big = $big . $lang . ":" ;

と同じです。

復号演算子はこれらを完結に記述できるもので、文字列以外なら

$n = 5 ;
$n = $n + 3 ;

// これも結果は同じ
$n = 5 ;
$n += 3 ;

などがあります。


また

echo $big;

 echo $big."¥n";

と書くのと同じ結果になりました。

同じではありません。

前者の出力は

<pre>
PHP:JavaScript:perl:</pre>

であり、後者は

<pre>
PHP:JavaScript:perl:
</pre>

となります。

どちらが正しいかはどちらの結果を求めるかによります。

id:gbs01

なるほど、ありがとうございます。

2009/05/21 09:31:22
id:taknt No.4

きゃづみぃ回答回数13481ベストアンサー獲得回数11982009/05/21 09:21:49

ポイント20pt

=の前につく.は その前の変数に連結するという意味になります。

.をのぞいて実行した場合、最後のperlだけになってしまいますが、.をつけることにより

今までの分が 連結されていくのです。

ちなみに.を使わないで記述すると

$big=$big.$lang.":";

となります。

echo $big;

 echo $big."¥n";

と書くのと同じ結果になりました。

画面上では 同じように見えますが、実は違います。

echo $big;

echo $big;

echo $big."¥n";

echo $big."¥n";

というように 二行記述して 確認してみてください。

ちゃんと改行コードの分 違いがわかるはずです。

id:gbs01

なるほど、ありがとうございます。

改行コードの違いが分かりました。

2009/05/21 09:32:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません