• 検索結果がありません。

PHP プログラムの構文実証

第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>';