PHPの基本
戻る


[1]PHPの基本

【構文の基本】

PHPのプログラムは<?phpから始まり、?>で終わります。
プログラム内に記入するコメントは先頭に//を付けます。また、/*から*/までもコメントになります。
HTMLやテキストを表示させるには、printまたはechoを使います。また、各処理の終端に;を忘れないように しましょう。

プログラムが動くかどうかは、 まず、メモ帳などのテキストエディタを開いて以下の文章をコピー&ペーストして「test.php」という名前 で保存してサーバにアップロードし、アクセスしてみてください。
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
///////////////////////////////////////////

print "この文章はprintで表示しています。"."<br><br>";
/*この文章は無視されます*/

echo ("この文章はechoで表示しています。<br>
           echoでは一行以上の出力ができ、便利です。
");
/*
この文章は無視されます
*/
?>
一行目の"この文章はprintで表示しています。"は一文で表示され、 <br><br>後の文章は2行で表示されていますね。 また、コメントが表示されていない事を確認してください。

試しに //PHPプログラムの動作テスト の//を取ってみましょう。
///////////////////////////////////////////
PHPプログラムの動作テスト
///////////////////////////////////////////
アクセスしてみてください。何も表示されないかエラーが表示されている筈です。
これはPHPが「PHPプログラムの動作テスト」を処理できない故に返されるエラーです。

また、「print "この文章はprintで表示しています。"."<br><br>";」を見てください。
""と""の間に「.」があるのが解ります。「.」は文字列と文字列を結合するのに使うものです。

メモ帳などのテキストエディタを開いて以下の文章をコピー&ペーストして「test1.php」という名前 で保存してサーバにアップロードし、アクセスしてみてください。
<?php
///////////////////////////////////////////
//PHPプログラムの動作テスト
///////////////////////////////////////////

print "この文章は"."print"."で表示"."しています。"."<br><br>";
/*この文章は「この文章はprintで表示しています。」と表示されます。*/

print "1"."2"."3"."4"."<br><br>";
/*この文章は「1234」と表示されます。*/

print "1"+"2"+"3"+"4"."<br><br>";
/*この文章は「10」と表示されます。*/
?>
一行目に表示される文章は「文字列」ですからそれぞれが「.」で結合され、 「この文章はprintで表示しています。」と一文で表示されていますね。
2行目に表示されているのは数字ですが、「.」で文章として結合されていますので、 「1234」と表示されます。
3行目に表示されているのは""内のそれぞれの値を加算して「10」と表示されているのが 確認できるでしょう。""内が文字列ではなく、値の場合「.」ではなくて「+」を使うと 文字列の結合ではなく、値の演算になります。
ちまみに、構文はCやperlなどと同じ書き方です。また、system関数を使えばUNIXコマンドもPHP 内で使用する事も可能です。


【変数】

変数とは値や文字列を入れるポケットのようなものです。
C言語などでは変数を宣言する際にその変数がどういうものなのか宣言しなければいけませんが、 PHPではそんな面倒な事はありません。
作成した変数には値(数値、intでもfloatでも可)でも文字列(文章)でも何でも入れられます。 但し、半角文字の\(\、バックスラッシュ)などの処理に使う文字は入れられません。
基本的に$をつければどのような変数を作成しても構いませんが、定義済みの変数とは違うもの にしてください。
<?php
//変数の使い方:条件分岐
$a="test1";
$b="test2";
if($a==$b){
       print "変数$aと変数$bは同じです。";
}
else{
       print "変数$aと変数$bは違うものです。";
}
//"変数$aと変数$bは違うものです。"が表示される
?>

<?php
//変数の使い方:演算
$a="1";
$b="2";
print $a+$b;
//"3"が表示される
?>

<?php
//変数の使い方:文字列の結合
$a="こんにちは";
$b="うさぎさん";
print $a.$b;
//"こんにちはうさぎさん"が表示される
?>

■変数の使い方:定義済みの変数(一部)

<?php
print $_SERVER["SERVER_NAME"];
//"サーバのドメイン名"(wspri.dip.jp)が表示される
print $_SERVER["REMOTE_ADDR"];
//"接続しているクライアントのIP"(あなたのリモートIP)が表示される
print $_SERVER["DOCUMENT_ROOT"];
//"ルートに設定されているディレクトリへのUNIXフルパス"が表示される
print $_SERVER["SCRIPT_FILENAME"];
//"実行しているプログラムへのUNIXフルパス"が表示される
print $_SERVER["SCRIPT_NAME"];
//"実行しているプログラムへのURLフルパス"が表示される
?>

□HTTPプロコトルから引き渡される変数
$_GET["name"]
GETで送信された値が格納される
$_POST["name"]
POSTで送信された値が格納される
$_COOKIE["name"]($HTTP_COOKIE_VARS["name"])
cookei値が格納される
$_FILES["name"](["name"])
POSTファイルアップロード時にファイルの各情報が格納される

□その他引き渡される変数
$_SESSION["name"]
セッション関数で設定された変数が格納される


<?php
//変数の使い方:配列

$a=array(0,1,2,3,4,5);
//$aの中に6つの"入れ子"ができてそれぞれに値が入る
print $a[1]+$a[5];
//[0]から数えて2番目の1と6番目の5を足して「6」が表示される。
?>

<?php
//変数の使い方:配列

$a=array("いぬ","ねこ","小鳥","うさぎ","金魚","かえる");
//$aの中に6つの"入れ子"ができてそれぞれに文字列が入る

for($i=0;$i<6;$i++){
       print $a[$i]."<br>";
}
//[0]から数えて6番目までの文字列が全て表示される。
?>

演算子
$a+$b
$aに$bを加算します
$a-$b
$aから$bを減算します
$a*$b
$aに$bを掛けます
$a/$b
$aを$bで割ります
$a%$b
$aを$bで割った残りを表します
$a++
$aに1を加算します($a=$a+1と同じ)
$a--
$aから1を減算します($a=$a-1と同じ)
$a.$b
$aの文字列に$bの文字列を結合します


【条件分岐】

条件分岐とは処理の中で多用されるプログラムの処理方法です。
if構文
「もし〜だったら、***をしなさい。そうでない場合は・・・をしなさい」という命令です。
<?php
//変数の使い方:条件分岐
$a="test1";
$b="test2";
if($a==$b){
       print "変数$aと変数$bは同じです。";
}
else{
       print "変数$aと変数$bは違うものです。";
}
//"変数$aと変数$bは違うものです。"が表示される
?>
以上はif($a==$b)$aと$bが同じものだったら、次に続く{から}内の処理をしなさいという意味で、 elseそうでない場合は次に続く{から}内の処理をしなさいという意味です。
if($a==$b)の「==」は比較演算子というものです。左右の値を比較します。

次の場合は受け取る変数の値が多くある場合のif構文の例です。スクリプトサンプルで配布 している振り分けプログラムの中身です。
<?php
$agent=$_SERVER['HTTP_USER_AGENT'];
//PCでIEの場合
if (preg_match ("/\bMSIE\b/i",$agent)&&preg_match ("/.NET/",$agent)){
       print "Internet Explorerでのアクセスですね\n";
}
elseif (preg_match ("/\bFirefox\b/i",$agent)){
       print "Firefoxでのアクセスですね!\n";
}
elseif (preg_match ("/\bOpera\b/i",$agent)){
       print "Operaでのアクセスですね!\n";
}
elseif (preg_match ("/\bNetscape\b/i",$agent)){
       print "Netscapeでのアクセスですね!\n";
}
elseif (preg_match ("/\bKDDI\b/i",$agent)||preg_match ("/UP.Browser/i",$agent)){
       print "auでのアクセスですね!\n";
}
elseif (preg_match ("/\bDoCoMo\b/i",$agent)){
       print "DoCoMoでのアクセスですね!\n";
}
elseif (preg_match ("/\bJ-PHONE\b/i",$agent)||preg_match ("/\bVodafone|MOT-\b/i",$agent)){
       print "Vodafoneでのアクセスですね!\n";
}
else{
       print "どんな機種かわかりません?\n";
}
?>
上のプログラムでは定義済み変数からアクセスしてきたユーザのブラウザ情報を得て、 /\bMSIE\b/i(「/\b」「\b/」は文字列の区切りで、MSIEにはマッチするがAMSIERなどにはマッチしない という意味。最後のiは大文字小文字は限定しないという意味)が$agentの中にあるか調べています。
&&や||というのは論理演算子というもので&&は左右の条件が合えばOKという意味で||は左右のどちらか の条件が合えばOKという意味です。

また、if構文は変数の値がTRUE(1)かFALSE(0)かの判定もできます。これは上で使っている関数preg_match などの場合、指定した文字列があった場合はTRUEを、なかった場合はFALSEを返しますので、 if(preg_match("検索文字列",変数))で、検索文字列があった場合はTRUEを返すので条件に該当するという ものです。
条件が該当しない場合を得るにはif(!preg_match("検索文字列",変数))と「!」という論理演算子をつけて preg_match("検索文字列",変数)に該当しない場合の条件を指定できます。

比較演算子
$a==$b
$aと$bが同じ値か比較します
$a!=$b
$aと$bが違う値か比較します
$a<$b
$aが$bより小さい値か比較します
$a>$b
$aが$bより大きい値か比較します
$a<=$b
$aが$bより小さい値か同じ値か比較します
$a>=$b
$aが$bより大きい値か同じ値か比較します

switch構文
「switch(〜)で指定した値がcase***の場合は・・・をする」という命令です。
<?php
//変数の使い方:配列

$a=array(0,10,20,30,40,50);
//$aの中に6つの"入れ子"ができてそれぞれに値が入る
switch($a[0]){
       case 0:
         $msg="値は0で、先頭の配列です。";
       break;
       case 10:
         $msg="値は10で、2番目の配列です。";
       break;
       case 20:
         $msg="値は20で、3番目の配列です。";
       break;
       case 30:
         $msg="値は30で、4番目の配列です。";
       break;
       case 40:
         $msg="値は40で、5番目の配列です。";
       break;
       case 50:
         $msg="値は50で、6番目の配列です。";
       break;
       default:
         $msg="不明です。";
       break;
}
print $msg;
?>
以上は$a[0]の値が次のcase **:の値の場合に以降のbreakまでの処理を行うというものです。$a[0]は 先頭の配列ですので値は「0」です。ですから$msg="値は0で、先頭の配列です。"の処理を行います。
switch($a[2])にしてみてください。$a[2]の値は3番目の配列の値「20」ですから、 $msg="値は20で、3番目の配列です。"の処理が行われます。



【繰り返し処理】

繰り返し処理はディレクトリを読んだり、ファイルを読み込んだりかなり多用します。

[1]while構文
whileは()内に指定された条件だけ繰り返し実行します。
<?php
//繰り返し処理:while構文1
$i=0;
while($i<10){
       print $i."<br>";
       $i++;
}
//$iが10未満まで繰り返します。"0"から"9"まで表示される
?>

<?php
//繰り返し処理:while構文2
$i=0;
$a=array("いぬ","ねこ","小鳥","うさぎ","金魚","かえる");
//$aの中に6つの"入れ子"ができてそれぞれに文字列が入る

while($i<count($a)){
       print $i.$a[$i]."<br>";
       $i++;
}
//"0"から"9"まで番号付きで配列の文字列が表示される
//count()は関数で、配列の数を数える命令
?>


[2]for構文
<?php
//繰り返し処理:for構文1
for($i=0;$i<10;$i++){
       print $i."<br>";
}
//$iが10未満まで繰り返します。"0"から"9"まで表示される
//whileとの違いは()内に全ての繰り返し条件を記載できる点です。
?>

<?php
//繰り返し処理:for構文2
$a=array("いぬ","ねこ","小鳥","うさぎ","金魚","かえる");
//$aの中に6つの"入れ子"ができてそれぞれに文字列が入る

for($i=1;$i<count($a)+1;$i++){
       print $i.$a[$i]."<br>";
}
//"1"から"10"まで番号付きで配列の文字列が表示される
//count()は関数で、配列の数を数える命令
//whileとの違いは上と同じですが、先頭につく数字が1〜10になっている事に注目してください。
?>


[3]foreach構文
foreachは配列の各値または文章を、その数だけ設定した別の変数に格納しながら処理する便利な構文です。
<?php
//繰り返し処理:foreach構文1
$a=array("いぬ","ねこ","小鳥","うさぎ","金魚","かえる");
//$aの中に6つの"入れ子"ができてそれぞれに文字列が入る

foreach($a as $value){
       print $value."<br>";
}
//foreachでは配列の数(ここでは6つ)を繰り返し、それぞれを$valueに代入します。
//foreach(配列変数 as 配列を分けて格納する変数)とするだけです。
//非常に便利な構文ですね。
?>

<?php
//繰り返し処理:foreach構文2
$a=array("いぬ","ねこ","小鳥","うさぎ","金魚","かえる");
//$aの中に6つの"入れ子"ができてそれぞれに文字列が入る

foreach($a as $key => $value){
       print $key.":".$value."<br>";
}
//foreach(配列変数 as $key(配列数を格納する変数) => 配列を分けて格納する変数)とすると、
//$keyに配列数がカウントされて格納されます。forやwhile構文での$iの役割と同じですね。
//別途にカウントしなくてもカウントしてくれますので便利ですよ。
?>




【ここまで理解できたら】

ここまで基本が理解できたら、あとはもう関数を使ってPHPプログラミングができます。基本的に プログラムはC言語もperlもjavaも同じようなものですので、以上を覚えれば何でもできると 思います。ね、カンタンでしょ?
また、このページでは関数について全てを説明できませんので、 ここにないPHP関数はリンクメニューにあるPHPマニュアルを見てください。




TOPへ