PHPstudy
PHPの基礎
PHPスクリプトとは
このページでは、基本的な事を説明します。
構文
PHPは、多くの構文をC言語、Java、Perlなどのプログラミング言語から借用しており、動的なウェブ・ページを速やかに作成できるのが特徴です。
基本と制御構造
PHPは"<?php" と "?>"で囲まれた内部をPHPコードと認識し実行します。それ以外の部分は全てHTMLコードとしてそのまま出力されます。
PHPスクリプト をホームページ作成に利用すると、大変豊かなWEBページの表現を実現できます。
WEBページにPHPを利用する方法は、2通りあります。
1つは、PHPとHTMLの混在型、もう一つは、PHPにHTMLを出力させる単体型です。
後者(単体型)の場合は、 PHPの「ヒアドキュメント(heredoc)」を利用すると、大変便利です。
ヒアドキュメントとは、PHP内にまとまった文章を直接記述し利用できるようにする方法です。
またその方法は、その文章を直接表示したり、変数に代入することもできます。
変数名の頭には$記号を付けます。
例えば変数名をnameとしたい時、それを表す変数は、$name、となります。
ヒアドキュメントのいちばん一般的な記法としては、<< の後に識別子を続け、その次の行から対象となる文字列を書き、そして最初に指定した識別子だけの行で終わりとなります。
ただし、PHPのヒアドキュメントに関しては、開始の不等号が 3つ となっていることに注意して下さい。
つまり、<<< となります。
例
<?php
$name = "Joe Smith";
$occupation = "Programmer";
echo <<<EOF ( 以下の文章を直接表示します。)
This is a heredoc section.
For more information talk to $name, your local $occupation.
Thanks!
EOF;
$toprint = <<<EOF (以下の文章を変数$toprintに代入しています。)
Hey $name! You can actually assign the heredoc section to a variable!
EOF;
echo $toprint;
?>
出力は以下のようになります。
This is a heredoc section.
For more information talk to Joe Smith, your local Programmer.
Thanks!
Hey Joe Smith! You can actually assign the heredoc section to a variable!
【注意】
ヒアドキュメントの後に続く文は、ヒアドキュメントの終端ID(識別子)の次の行から書くことになりますが、文が終わったら、その次の行にヒアドキュメントの終端ID(識別子)を書き、更にその直後にセミコロンを書きます。
この場合のセミコロンを除いて、終端IDと同じ行に(空白文字を含め)余計な文字を書いてしまうと、それは終端として処理されなくなってしまいます。
正しい終端が見つからないと、PHPはスクリプトの最後でパースエラーとなります。
PHP 5.3以降では、ヒアドキュメントの識別子を一重引用符で囲むことで、内部での変数展開が行われない、Nowdocという機能も登場しています。
( Nowdoc を詳しく知りたい方は ⇒ ここをクリック! )
さらに、同じくPHP 5.3以降では、ヒアドキュメントを開始する識別子を二重引用符で囲むこともできるようになっていますが、ヒアドキュメントの動作としては何も囲まない場合と同じです。
echo命令
echo はブラウザに文字を表示するための命令です。
文字列を直接表示させたい場合、echo に続いて '(シングルクォート)もしくは "(ダブルクォート)で囲んだ文字列を書くと、その内容がブラウザに表示されます。
' で囲って表示した文字列内では、エスケープ文字や変数が展開されずにそのまま表示されます。
また、各命令は ;(セミコロン)で区切る決まりになっています。例えば
<?php
echo "はじめまして!";
echo "私の名前は夏目宗次郎です。";
echo "よろしくお願いします。";
?>
これをブラウザ上で見ると、
「 はじめまして!私の名前は夏目宗次郎です。よろしくお願いします。 」
と表示されます。
もし、セミコロンを忘れて
<?php
echo "はじめまして!"
echo "私の名前は夏目宗次郎です。"
echo "よろしくお願いします。"
?>
と、このように書くとエラーになるので注意してください。
ただし、セミコロンは「命令の区切り」なので、命令が一つの場合や、
最後の場合はセミコロンが無くても動作します。
つまり、
<p>今日の日付は<?php echo date("Y/m/d") ?>です。</p>
このプログラムは動作しますし、
<?php
echo "はじめまして!'';
echo "私の名前は夏目宗次郎です。'';
echo "よろしくお願いします。"
?>
このプログラムも動作します。
しかし、セミコロンの付け忘れでエラーになってしまうことが多いため、
初めのうちはセミコロンを省略せずに書いた方がいいでしょう。
改行について
プログラム中で文字の改行を行いたい場合は、HTMLの文法に従って <br /> タグを出力すればOKです。
具体的には、以下のようになります。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サンプル</title>
</head>
<body>
<p>
<?php
echo "はじめまして!<br />";
echo "私の名前は夏目宗次郎です。<br />";
echo "よろしくお願いします。<br />";
?>
</p>
</body>
</html>
これで、「はじめまして! 」 の直後で改行され、次の行に「 私の名前は夏目宗次郎です。」が表示された後、また次の行に改行されて「よろしくお願いします。」が表示されて改行されます。
これは、通常のHTML文章とまったく同じですね。
ソース上での改行
それでは、表示されたページのHTMLソースを表示させてみてください。
HTMLソース を確認すると、
はじめまして!<br />私の名前は夏目宗次郎です。<br />よろしくお願いします。<br />
と、一行に表示されていると思います。
そこで、HTML文章を手書きで作成する場合、HTML文章を見やすくするために適度に改行を挿入しますが、上のプログラムだとそれがされていません。
改行をしたければ、別途改行文字を書く必要があります。
PHPでは改行文字は \n と表現します。
ですから echo で表示される文章中に \n と書くと、その部分でHTMLソースが改行されます。
それでは、HTMLソースが改行されるように、sample.php の内容を書き換えてみます。
一例を挙げると以下のようになります。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サンプル</title>
</head>
<body>
<p>
<?php
echo "はじめまして!<br />\n ";
echo "私の名前は夏目宗次郎です。<br />\n ";
echo "よろしくお願いします。<br />\n ";
?>
</p>
</body>
</html>
HTML表示部分の最後に、\n を追加しています。
これを実行して、そのHTMLソースを表示させてみてください。
以下のように、改行されたHTMLが表示されます。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サンプル</title>
</head>
<body>
<p>
はじめまして!<br />
私の名前は夏目宗次郎です。<br />
よろしくお願いします。<br />
</p>
</body>
</html>
これくらいのプログラムなら改行があっても無くても大差は無いですが、適切に改行を行っておくと、
複雑なHTMLを出力した際に正しいHTMLを出力できているかチェックしやすくなります。
また、PHPからファイルに文字を書き込む場合にも、改行させる場合は \n を使用します。
プログラム上での改行
プログラム中での改行や空行は、基本的には無視されます。つまり
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サンプル</title>
</head>
<body>
<p>
<?php
echo "はじめまして!<br />\n ";
echo "私の名前は夏目宗次郎です。<br />\n ";
echo "よろしくお願いします。<br />\n ";
?>
</p>
</body>
</html>
このように適当に行を空けても、実行結果にはまったく影響はありません。
自分で判りやすいと思うように、表示内容のまとまりごとに空行を入れておくといいでしょう。
コメント記号
スクリプト中に記述する説明文をコメントと言います。
コメントは実行時に無視されます。どんな内容を書いてもエラーにはなりません。
プログラムが長くなると、どこに何を書いたかわからなくなったり、また、プログラムを書いているその時はわかっていても、時間が経つと詳細がわからなくなったりします。
そこで、予めスクリプトの処理内容などについてコメントを書き込んでおけば、将来のメンテナンス時に大いに役に立つわけです。
コメントであることを示す記号は、
「 // 」、「 /* 〜 */ 」、「 # 」、「 <!-- 〜 --> 」などがあります。
PHPで使われるコメントの記号は、 // 、 /* 〜 */ です。
// :一行コメントで使われる。(//から行末まで)、PHP、C++言語
/* 〜 */ :複数行コメントの時使われる。(特定のブロックをまとめてコメント)、PHP、C言語
# :一行コメント(#から行末まで)、シェル、Perl言語
<!-- 〜 -->:複数行コメント(特定のブロックをまとめてコメントする)、HTML言語
(例)
<?php
// 今日の日付を示します
print date("Y年m月d日");
print "<HR>"; //水平線を表示
/* 今日の日付を示します。
ここでは曜日も表示します。 */
print date("Y年m月d日(l)");
/* 水平線を示す */
print "<HR>";
?>
◆ 注意
文字列を表示する(print、echo)について、
echoとprintは同じく文字列を表示します。
print は関数として定義され、戻り値があり、文字列をひとつしか指定できませんが、
echo は言語構造(言語仕様のひとつ)として定義され、戻り値は無く、カンマを用いて
文字列を複数指定できます。速度は echo の方が若干だけ早いようです。
(例)
print date("Y/m/d") . "<br>"; ⇐< ピリオド( . )は文字列の連結を示します。>
echo "This is a pen. There are two books.";
エラーメッセージ
3種類のエラー
PHPのエラーは、大きく分けて3種類あります。
1.文法エラー
パースエラー(Parse error)といいます。スクリプトの記述に、文法上の問題がある場合に、発生するエラーです。文法エラーは、プログラムが実行される前にチェックされます。従って、このエラーがあるとスクリプトは全く実行されず、エラーメッセージだけが表示されます。
2.実行時エラー
文法のチェックが完了した後、プログラムを実行して始めて問題が露見するケースで発生するエラーです。
例えば、MySQLのデータベースにアクセスするプログラムでは、次の様なエラーが発生することがあります。
この例では、多数のエラーメッセージが表示されています。PHPは実行時エラーが発生すると、そこでプログラムが停止することはなく、以後の処理は実行されてしまいます。このため、データベースが起動していなければ、データベースに関する全ての処理がエラーとなって画面に表示されます。
しかし、問題の原因は「MySQLが起動していない」ことだけです。
このようなメッセージが表示されると困惑するかもしれないが、ポイントは文法エラーの場合と同様です。まず、表示されているエラーメッセージに目を向け、要因を探ります。あるいは、そこに表示されている行番号から上のスクリプトをチェックします。
3.論理的なエラー
計算式の考え方が間違っている場合に発生するエラーです。
例えば、「単価×数量=金額」という計算式にすべきところを「単価+数量=金額」としてしまうと、エラーメッセージは表示されませんが、正しい結果を得ることは出来ません。論理的なエラーの原因は、プログラムの仕様や考え方の間違いにあるため、実際にテストしてエラーがあるかを確認し、問題を分析しないと解決できません。
date関数
date とは、日時を取得できる関数です。関数とはあらかじめPHPに用意されている命令で、その関数名を書くと処理の結果が返ってきます。(PHPには他にもたくさんの関数が用意されています。)
関数 date("Y/m/d") について見てみましょう。
括弧内の文字は以下のようなアルファベットを指定できます。
文字 意味 例
Y 年が4桁の数字で表示されます 2010
m 月が2桁の数字で表示されます 09
d 日が2桁の数字で表示されます 01
H 24時間単位の時間が2桁の数字で表示されます 15
i 分が2桁の数字で表示されます 06
s 秒が2桁の数字で表示されます 47
つまり、date("Y/m/d") と書くと「2010/09/01」のような文字列が返され、date("H:i") と書くと「15:06」のような文字列が返されます。
PHPは非常にたくさんの関数が用意されているため、すべての関数と意味を覚えるのは不可能です。
なので、その都度調べながらプログラムを作成することになります。
PHPの活用(インタラクティブなHPを作る。)
例:【phpサンプルプログラム】
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>php sample program</title>
</head>
<body>
<div style="margin:150px 0 0 300px;width:500px;height:90px;border:1px solid #555555;text-align:center;background-color:#fefe9e;font-weight:bold">
<?php
print "<br>";
print "<br>";
if( ! ini_get('date.timezone') )
{
date_default_timezone_set('GMT');
}
print "現在の日時は ". date("Y年m月d日 H時i分") . " です。";
print "<br>";
?>
</div>
</body>
</hrml>
PHPスクリプト(小さなプログラム)は、HTMLと混在して書きます。
そしてそのファイル名には、拡張子「~.php」をつけます。
逆に、HTML文書内に、一行でもphpスクリプトが入っておれば、
そのファイルは「phpファイル」となります。
上記のプログラムを実際実行する ⇒ ''PHPサンプルプログラムを実行''