ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ゼロからはじめるPHP講座コミュのその2 echoと変数と文字列の使い方

  • mixiチェック
  • このエントリーをはてなブックマークに追加
その2 echoと変数と文字列の使い方

さて、第2回です。
まず変数(へんすう)について、説明しましょう。
変数とは数字や文字を記憶させておく箱です。
変数は非常に便利なものなので、ほとんどの言語にあります。

PHPの場合、変数には頭に「$」をつけます。
例を挙げると、

<html>
<body>
<?php
$a = 100;
$b = 200;
$c = $a + $b;
echo $c;
?>
</body>
</html>

演算式は「右辺のものを左辺に入れる」といった書き方になっています。
決して「100 = $a;」などとは書かないでください。エラーになります。
そして、計算の結果が入った「$c」をechoで表示しています。
表示は「300」となるはずです。

整数だけではなく、少数も変数に入れることができます。
(C言語をやった人は驚くかもしれませんが、PHPは変数の型を宣言しなくていいんです。なんと自動的に型変換が行われるんです。)

<html>
<body>
<?php
$a = 100;
$b = 3.14;
$c = $a + $b;
echo $c;
?>
</body>
</html>
これの表示は「103.14」になります。

また、文字列も変数に入ります。
文字列は「'」(シングルクォーテーション)または「"」(ダブルクォーテーション)で囲む必要があります。

<html>
<body>
<?php
$a = '1行目<br>';
$b = '2行目<br>';
$c = $a . $b;
echo $c;
?>
</body>
</html>

これを表示すると、
「1行目
 2行目」
となります。改行の<br>が入っているから改行されます。
ここで注意するのは、文字列は数字ではないので、「+」は使えません。
結合されたいのならば、「.」(小数点)を使います。
上のソースは「$c = $a . $b;」ってなってるでしょ?
これによって「$c」の中身に「1行目<br>2行目<br>」が入るんです。

また、変数「$c」を使わずに、こう書いても結果は同じです。
<html>
<body>
<?php
$a = 'これは1行目<br>';
$b = 'これは2行目<br>';
echo $a . $b;
?>
</body>
</html>

まったく変数を使わずに、こう書いてもいいです。
<html>
<body>
<?php
echo 'これは1行目<br>' . 'これは2行目<br>';
?>
</body>
</html>

この「くっつけの小数点」をつかって一番最初の足し算の
計算式を改造しましょう。
<html>
<body>
<?php
$a = 100;
$b = 200;
$c = $a + $b;
echo $a . '+' . $b . '=' . $c . '<BR>';
?>
</body>
</html>
これで今までの「300」だけではなく、「100+200=300」と表示されます。

さて、でもこれじゃいつまでたっても
「100+200」ですよね。
「630+180」をしたい時は、更新しないといけませんよね・・・。
あー、めんどくさい、めんどくさい・・・。更新かよー。

そこでフォームを使いましょう!
実は意外と簡単です。新たに使用するHTMLは3種類でいいんです。

<form method="post" action="plus.php">
これの意味は、情報を「post」形式で送り、「plus.php」に情報を送るぞっていう宣言です。
これと</form>の間に次の<input>たちを記述します。

<input type="text" name="tasarerukazu" value="足される数を入れてね">
これで、テキストの入力フォームを作ります。nameはこのテキスト入力につける名前です。
<input type="text" name="tasukazu" value="足す数を入れてね">
これも、上と同じです。nameが「tasukazu」になっています。

<input type="submit" value="計算">
これで、<form>の中のactionに設定したページに情報を送るための送信ボタンを作ります。
valueはボタンに表示される文字です。

</form>
最後はこれで、フォームのふたを閉じます。

ここまできたらOKです。実際にフォームで動くPHPを作りましょう。
足し算ホームページです。入力した値を足し算してくれます。
題名は「plus.php」で作ってね。

<html>
<body>
<?php
$a = $_POST['tasarerukazu'];
$b = $_POST['tasukazu'];
$c = $a + $b;
?>

<form method="post" action="plus.php">
<input type="text" name="tasarerukazu" value="足される数を入れてね">
<br>
<input type="text" name="tasukazu" value="足す数を入れてね">
<br>
<?php
echo $a . '+' . $b . '=' . $c . '<br>';
?>
<input type="submit" value="計算">
</form>
</body>
</html>

ここで、初めてみる変な変数があります。
$a = $_POST['tasarerukazu'];
$b = $_POST['tasukazu'];  (※このPOSTは大文字で書いてね!)
これは、POST形式で受け取ったテキストの内容を示すものです。
それぞれ、<INPUT〜>で「tasarerukazu」と「tasukazu」のテキストに入力された文字が「$a」と「$b」に代入されるのです。
(一番最初このPHPを見ると「+=0」というのが見えると思います。
これは、一番最初に表示した段階ではまだ入力フォームから値をもらっていないので、「$a」と「$b」には空白が代入されることになります。
また「$c」は数字でない文字列(空白)の足し算ですので、ゼロになります。
したがって、echoの結果「+=0」が表示されます。
数字を入力して、計算ボタンを押すと解消されますが、なんか嫌ですね・・・。)

おそらく、はじめて動くフォームを作ったと思います。
自分で色々改造してみましょう。+、−、*、/なんかもできます。
色々入力も試しましょう、マイナスや少数もやってみましょう。
数字ではなく、文字列同士を足し合わせるとどうなりますか?
全角の数字の足し算はどうですか。全角数字は数字ではなく文字列と判断されます。おそらく答えは0になると思います。
それでは「7人の侍」と「13日の金曜日」を足すとどうなるでしょうか?(頭の数字は半角で)
是非やってみてください。PHPの変数の変わった側面が見れると思います。

しかし、もっといいものを作りたいですね。最初に必ず出る「+=0」ってなんか嫌ですよね。
次回は、if文について説明しながら、ちょっとだけ本格的な簡易電卓をつくりましょう。
それではまた!

P.S.
変数について詳しく知りたい人はいいページがあります。
http://www.scollabo.com/banban/php/php_04.html#top
この方のページはわかりやすいです。http://www.scollabo.com/banban/php/index.html
PHP初心者にお勧めの勉強ページです。

P.S.その2
こないだのdate関数の説明で色々やっていると気づくかもと言いました。
それは、「date("今日はY年m月d日です。<\b\r>");」はYとMとdに当たるところが年月日に変わるんですが、
そうすると、「Y、m、d」等の英文字は文章として使えない? ということになりますよね。
実際に「date("TODAY IS Y-m-d<br>");」とやると恐ろしいことに
「JST+0900FriAM2005 0nd 2005-07-22 」と表示されます。dateの参照は http://jp2.php.net/date
対策は2種類あります。
・日付にしたくない文字にはエスケープシーケンスをつける(¥またはバックスラッシュ(/の逆))
「echo date("\T\O\D\A\Y \I\S Y-m-d<\b\r>"); 」

・先ほど説明した"."を使って文字列を連結するかいずれかの方法になります。
「echo 'TODAY IS ' . date("Y-m-d<br>") . '<BR>'; 」

コメント(8)

とく2にPHPをアップしました。
広告が出るからすごく遅いけど、勘弁してね。

足し算
http://www35.tok2.com/home/zerokara/plus.php
<?php echo date("\t\o\d\a\y \i\s Y-m-d").".<br>"/* 修正しました */?>だと、
最初の「t」が消えてしまいます。
大文字にすると問題ありません。これはなぜでしょうか?
>>beatmasterさん

<?php
echo date("\T\O\D\A\Y \I\S Y-m-d<\b\r>");
?>
佐々木さんは恐らくエスケープシーケンスの例として上記を書いていると思いますが
\tはタブとして扱われてしまいます。
他にも\nや\rや\r\nは改行文字と扱われてしまいます。

この様な場合やはり佐々木さんも書いているように以下に様なやり方にするのがベストだと思います。
<?php
echo "today is ".date("Y-m-d")."<br>";
?>
そうですね・・・。
みなさんすみませんでした。
サポートありがとう!
>Dilemma さん
ありがとうございます。
確かにその方が簡単ですね。
taqさん

>こうする事によってあとにも$todayが利用できますよね。

それもあるけど、秒まで取ると、最初にdateで取った値とプログラムの後半で取った値が異なる(1秒以上ズレる)ことがありうるので、最初に変数にしまったほうがいいかも、と私は考えています。

えっ?一秒もかかるプログラムを書くなと?

<?php
echo date('H:i:s')."\n";
sleep(10);
echo date('H:i:s')."\n";
?>

もちろん意図的に異なった値が来るとわかりきって書く場合は別ですが。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

ゼロからはじめるPHP講座 更新情報

ゼロからはじめるPHP講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング