第4章 PHP プログラミング 4.1 PHP プログラミングの特徴
4.5 PHP プログラムの構文実証
<html>
<body>
<?php
$a=100;
$b=50;
$x=$a+$b;
print “変数を使って演算を行い print 文で出力しました<br>\n”;
print “100 + 50 = “.$x.”<br>”;
?>
</body>
</html>
結果:
インタネットエクスプローラ画面上に、以下の文字が表示されます。
変数を使って演算を行い print 文で出力しました 100+50=150
<練習課題>
“100+50=150”の部分の出力を、printf 構文を使って出力してください。
ヒント:
$xxxx 変数の内容を10進数で、$yyy の内容をストリング形式で表示する構文は以下の 通りです。
printf(“%d%s”,$xxx,$yyy);
4.5.3 PHP プログラムによる HTML 文書の作成プログラミング
php3.php プログラム
<?php
print <<<end
<HTML>
<BODY>
<U>PHP で作成された HTML プログラムです。
</BODY>
</HTML>
end;
?>
結果:
インターネットエクスプローラ画面上に以下の文字が表示されます。
PHP で作成された HTML プログラムです。
また、インターネットエクスプローラ画面からソースを参照した場合、PHP プログラムで定義 された<HTML>から</HTML>までのプログラムが表示されます。
<練習課題>
全ての HTML 文をそれぞれ、個別の print 文で出力してください。
4.5.4 算術演算子を使ったプログラミング
enzan.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
変数$b の値:
<INPUT NAME="b" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a']) && !empty($_GET['b'])) {
$A=$_GET['a'];
$B=$_GET['b'];
$C=$A;
printf("\$A=%s,\$B=%s として演算を行います<BR>",$A,$B);
printf("***********************************<BR><BR>");
printf("\$A+\$B=%d となります<BR><BR>",$A+$B);
printf("\$A-\$B=%d となります<BR><BR>",$A-$B);
printf("\$A*\$B=%d となります<BR><BR>",$A*$B);
printf("\$A/\$B=%d となります<BR><BR>",$A/$B);
print("\$A%\$B=");
printf("%d となります<BR><BR>",$A%$B);
printf("\$A=%d⇒++\$A=%d⇒\$A=%d となります<BR><BR>",$A,++$A,$A);
$A=$C;
printf("\$A=%d⇒\$A++=%d⇒\$A=%d となります<BR><BR>",$A,$A++,$A);
$A=$C;
printf("\$A=%d⇒--\$A=%d⇒\$A=%d となります<BR><BR>",$A,--$A,$A);
$A=$C;
printf("\$A=%d⇒\$A--=%d⇒\$A=%d となります<BR><BR>",$A,$A--,$A);
}
?>
</BODY>
</HTML>
結果:
URL で渡された値に従い、各々の演算が行われ、その結果が表示されます。
<練習課題>
url のパラメータに、a=100、b=50 を設定して実行し、実行結果が正しいことを確認してくださ い。
4.5.5 ビット演算子を使ったプログラミング
bitenzan.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
変数$b の値:
<INPUT NAME="b" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a']) && !empty($_GET['b'])) {
$A=$_GET['a'];
$B=$_GET['b'];
$A=(integer)$A;
$B=(integer)$B;
$C=$A;
printf("\$A=0x%x,\$B=0x%x として演算を行います<BR>",$A,$B);
printf("***********************************<BR><BR>");
printf("論理積<BR>\$A&\$B=0x%x となります<BR><BR>",$A&$B);
printf("論理和<BR>\$A|\$B=0x%x となります<BR><BR>",$A|$B);
printf("排他的論理和<BR>\$A^\$B=0x%x となります<BR><BR>",$A^$B);
printf("否定<BR>~\$A=0x%x となります<BR><BR>",~$A);
printf("\B で指定されたビット分左シフト<BR>\$A<<\$B=0x%x となります<BR><BR>",$A<<$B);
$A=$C;
printf("\B で指定されたビット分右シフト<BR>\$A>>\$B=0x%x となります<BR><BR>",$A>>$B);
}
?>
</BODY>
</HTML>
結果:
コメントで表示された演算が正しく行われます。
<練習課題>
URLで、a=50,b=3 設定した場合、どのような結果になるかを想定してください。また、実際 に実行して、その結果を検証してください。
補足:
変数に入っている内容を、別の型で変換したい(型キャスト)場合は、型変換構文を使います。
整数への変換 (int) $AAAA 又は (integer)$AAAA
倍精度実数への変換 (real)$AAAA 又は (double)$AAAA 又は (float)$AAAA 文字列への変換 (string)$AAAA
配列への変換 (array)$AAAA
オブジェクトへの変換 (object)$AAAA
4.5.6 文字列、代入演算子を使ったプログラミング
dainyuenzan.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
変数$b の値:
<INPUT NAME="b" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a']) && !empty($_GET['b'])) {
PRINT '文字列、代入演算に関するサンプルプログラムです。<br>';
PRINT '***********************************************<br>';
$A=$_GET['a'];
$B=$_GET['b'];
$C=$A;
printf("<BR>文字列演算<BR>\$A.\$B=%s となります<BR><BR>",$A.$B);
$A=$B;
printf("<BR>単純代入<BR>\$A=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A+=$B;
printf("<BR>加算代入<BR>\$A+=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A-=$B;
printf("<BR>減算代入<BR>\$A-=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A*=$B;
printf("<BR>乗算代入<BR>\$A*=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A/=$B;
printf("<BR>除算代入<BR>\$A/=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A%=$B;
print("<BR>剰余代入<BR>\$A%=\$B ⇒ ");
printf("\$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A&=$B;
printf("<BR>AND 代入<BR>\$A&=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A|=$B;
printf("<BR>OR 代入<BR>\$A|=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A.=$B;
printf("<BR>連結代入<BR>\$A.=\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A=&$B;
printf("<BR>参照代入<BR>\$A=&\$B ⇒ \$A=%s、\$B=%s となります<BR><BR>",$A,$B);
$A=$C;
$A<<=1;
printf("<BR>左1ビットシフト <BR>\$A<<=1 ⇒ \$A=%s となります<BR><BR>",$A);
$A=$C;
$A>>=1;
printf("<BR>右1ビットシフト<BR>\$A>>=1 ⇒ \$A=%s となります<BR><BR>",$A);
$A=$C;
$A>>=2;
printf("<BR>右2ビットシフト<BR>\$A>>=2 ⇒ \$A=%s となります<BR><BR>",$A);
}
?>
</BODY>
</HTML>
結果:
URL により指定された値に従って、それぞれの演算が行われます。
<練習課題>
“加算代入”から“除算代入”までの構文を、通常の数式構文に置き換えて実行してください。
通常の演算書式とは以下のような書式を意味します。
$A+=$B; ⇒ $A=$A+$B;
4.5.7 比較、三項、論理演算子を使ったプログラミング
hikakuenzan1.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a'])) {
PRINT '比較構文に関するサンプルプログラムです<br>';
PRINT '*******************************************<br>';
$A=$_GET['a'];
if ($A==10)
print 'if 構文1:結果は10に等しいと判定されました<BR>';
elseif ($A==20)
print 'if 構文1:結果は20に等しいと判定されました<BR>';
else {
print "if 構文1:結果は10でも20でもないと判定されました<BR>";
}
if ($A==10): {
print "if 構文2:結果は10に等しいと判定されました <BR>";
}
elseif ($A==20): {
print " if 構文2:結果は20に等しいと判定されました <BR>";
} else: {
print " if 構文2:結果は10でも20でもないと判定されました <BR>";
} endif;
print(“<BR><BR>”);
}
?>
</BODY>
</HTML>
hikakuenzan2.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset= EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a'])) {
PRINT '三項演算を行うサンプルプログラムです<BR>';
PRINT '*********************************** <BR>';
$A=$_GET['a'];
$A>10?print "\$A>10 と判断されました<BR>":print "\$A>10 と判断されませんでした<BR>";
printf("\$A%s10 と判断されました",($A==10)? "==" : "!=");
print("<BR><BR>");
}
?>
</BODY>
</HTML>
hikakuenzan3.php プログラム
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset= EUC-JP">
</HEAD>
<BODY>
<?php
echo <<<php1
<FORM MOTHOD="GET" ACTION="{$_SERVER['PHP_SELF']}">
php1;
?>
変数$a の値:
<INPUT NAME="a" TYPE="TEXT" SIZE=5>
変数$b の値:
<INPUT NAME="b" TYPE="TEXT" SIZE=5>
<INPUT NAME="SUB" TYPE="SUBMIT" VALUE="送信">
</FORM>
<?php
if (!empty($_GET['a']) && !empty($_GET['b'])) { PRINT '論理積演算を行うプログラムです。<BR>';
PRINT '*********************************** <BR>';
$A=$_GET['a'];
$B=$_GET['b'];
if ($A==10 and $B==20)
print '$A==10 and $B==20 で成立しました<BR>';
if ($A==50 and $B==20)
print '$A==50 and $B==20 では成立しました<BR>';
if ($A==10 && $B==20)
print '$A==10 && $B==20 で成立しました<BR>';
if ($A==50 && $B==20)
print '$A==50 && $B==20 で成立しました<BR>';
if ($A==50 && $B==20)
print '$A==50 && $B==20 で成立しました<BR>';
if ($A==10 or $B==20)
print '$A==10 or $B==20 で成立しました<BR>';
if ($A==10 or $B==50)
print '$A==10 or $B==50 で成立しました<BR>';
if ($A==50 or $B==20)
print '$A==50 or $B==20 で成立しました<BR>';
if ($A==50 or $B==30)
print '$A==50 or $B==30 では成立しました<BR>';
if ($A==10 || $B==20)
print '$A==10 || $B==20 で成立しました<BR>';
if ($A==10 || $B==50)
print '$A==10 || $B==50 で成立しました<BR>';
if ($A==50 || $B==20)
print '$A==50 || $B==20 で成立しました<BR>';
if ($A==50 || $B==30)
print "$A==50 || $B==30 で成立しました<BR>";
if ($A==10 xor $B==20)
print '$A==10 xor $B==50 では成立しました<BR>';
if ($A==10 xor $B==50)
print '$A==10 xor $B==50 で成立しました<BR>';
if ($A==50 xor $B==20)
print '$A==50 xor $B==20 で成立しました<BR>';
if ($A==50 xor $B==30)
print '$A==50 xor $B==30 で成立しました<BR>';
if (!$A==11)
print '!$A==11 で成立しました<BR>';
if (!$A==10)
print '!$A==10 で成立しました<BR>';
PRINT "<BR>";
}
?>
</BODY>
</HTML>
sonota.php プログラム
<?php
PRINT '"ls -l"コマンドを実行する実行演算子を使ったサンプルプログラムです<BR>';
PRINT 'コマンドを定義する、$A=`ls -l`の"`"マークに注意してください<BR>';
$A=`ls -l`;
echo "$A";
?>
結果:
URL で指定された値との比較が行われ、構文に応じた評価が行われます。また、sonota.php を 実行した場合、指定されたコマンドが実行されます。
4.5.8 1 次元、2次元、3次元配列を活用したプログラミング
array.php プログラム
<HTML>
<BODY>
<?php
PRINT '***多次元配列に関するサンプルプログラムです。***<BR>';
PRINT '1 次元配列です。$A と$B では配列記述の方法が違います<BR>';
$A= array(
"秋刀魚"=>"さんま",
"鯖"=>"さば",
"鮪"=>"まぐろ");
$B= array(
"秋刀魚",
"鯖",
"鮪");
PRINT '$A[鯖]の出力です ⇒';
echo $A['鯖'];
PRINT '<BR>$B[1]の出力です ⇒';
echo $B[1];
PRINT "<BR>";
PRINT '2 次元配列です。$A と$B では配列記述の方法が違います<BR>';
$A= array(
"海魚" => array(
"秋刀魚"=>"さんま",
"鯖"=>"さば",
"鮪"=>"まぐろ"),
"川魚" => array(
"鮎"=>"あゆ",
"鯉"=>"こい",
"鮒"=>"ふな") );
$B= array(
"海魚" => array(
"秋刀魚",
"鯖",
"鮪"),
"川魚" => array(
"鮎",
"鯉",
"鮒") );
PRINT '$A[海魚][鯖]の出力です ⇒';
echo $A[‘海魚’][‘鯖’];
PRINT '<BR>$B["川魚"][1]の出力です ⇒';
echo $B[‘川魚’][1];
PRINT "<BR>";
PRINT '<BR>$C[1][2]に"CCC"保存した時の、$C[1][2]の出力です ⇒';
$C[1][2]="CCC";
echo $C[1][2];
PRINT "<BR>";
PRINT '3 次元配列です。<BR>';
PRINT '<BR>$D[1][2][1]に"DDD"保存した時の、$D[1][2][1]の出力です ⇒';
$D[1][2][1]="DDD";
echo $D[1][2][1];
?>
</BODY>
</HTML>
結果:
数字修飾でも、キー修飾でも、指定した配列の内容が抽出されます。
補足:
配列のインデックスは0から始まります。
<練習課題>
$A 配列に登録されている"ふな“を取り出す構文を作成し、実行してください。また、$B 配 列に登録されている”鮎“を取り出す構文を作成して実行してください。
各々の表示内容は以下とします。
$A の内容を表示しました⇒ふな
$B の内容を表示しました⇒鮎
4.5.9 型変換に関するプログラミング
kata.php プログラム
<HTML>
<BODY>
<?php
PRINT '***型変換に関するサンプルプログラムです。***<BR><BR>';
$A=123;
PRINT '$A=123 の時の,$A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%d です。<br><br>",$A);
$A="123";
PRINT '$A="123"の時の,$A の型は、'. gettype($A) . "です<BR>";
printf("設定された値は、%s です。<br><br>",$A);
$A=123.45;
PRINT '$A=123.45 の時の,$A の型は、'. gettype($A) . "です<BR>";
printf("設定された値は、%f です。<br><br>",$A);
$A=0xf0f0;
PRINT '$A=0xf0f0 の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%x です。<br><br>",$A);
$A=(INT)"123";
PRINT '$A=(INT)"123"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%d です。<br><br>",$A);
$A=(REAL)"123";
PRINT '$A=(REAL)"123"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%f です。<br><br>",$A);
$A=(DOUBLE)"123";
PRINT '$A=(DOUBLE)"123"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%f です。<br><br>",$A);
$A=(FLOAT)"123";
PRINT '$A=(FLOAT)"123"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%f です。<br><br>",$A);
$A=(ARRAY)"123";
PRINT '$A=(ARRAY)"123"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%s です。<br><br>",$A[0]);
$A=(STRING)123.45;
PRINT '$A=(STRING)"123.45"の時の,\A の型は、' . gettype($A) . "です<BR>";
printf("設定された値は、%s です。<br><br>",$A);
?>
</BODY>
</HTML>
結果:
PHP は、変数に設定される値により型が決まります。(基本的には、Double,Integer,String と なります。Double は浮動小数点形式です)
<練習課題>
以下のように構文を変えた場合に、その結果がどうなるかを確認してください。
$A=123; ⇒ 10 桁の数字を設定します
32ビットの有効範囲に収まる値を設定した場合と、収まら ない場合の違いを認識してください。
Double の形式で格納された、整数数値の有効範囲を超えた数 値を整数で表記した場合の問題をを認識してください。
$A=123.45; ⇒ 以下の浮動小数点の計算を行います。
0.012345499+0.000000001
有効桁数と誤差があることを認識してください。
上記の実行結果を確認し、その理由を明確にしてください。
4.5.10 制御構文(WHILE,FOR,SWITCH,FOREACH など)を使ったプログラミング
制御構文“IF”に関しては、” 比較、三項、論理演算子を使ったプログラミング“の項を参照ください。
seigyo01.php プログラム
<HTML>
<BODY>
<?php
PRINT '***制御構文に関するサンプルプログラムです。***<BR>';
PRINT 'WHILE 構文(1)による10回繰り返すのプログラムです。<BR>';
$A=1;
While($A<11){
PRINT "$A 回目の繰り返しです ⇒";
$A++;
}
PRINT "WHILE を終了しました<BR><BR>";
PRINT 'WHILE 構文(2)による10回繰り返すのプログラムです。<BR>';
$A=1;
While($A<11):
PRINT "$A 回目の繰り返しです ⇒";
$A++;
ENDWHILE;
PRINT "WHILE を終了しました<BR>";
PRINT "無限繰り返しは、WHILE(1)で行います。強制脱出は、BREAK です<BR>";
PRINT "<BR>";
?>
</BODY>
</HTML>
結果:
どちらの構文でも同じ繰り返す処理が行われます。
<練習課題>
While 構文を使って、1から1000迄の数値を全て加算し、出力するプログラムを作ってく ださい。プログラム名は以下とします。
Kadaiseigyo01.php
seigyo02.php プログラム
<HTML>
<BODY>
<?php
PRINT "<BR>";
PRINT 'FOR 構文による10回繰り返すのプログラムです。<BR>';