まとめ演習(1)

PHPコード記述

新規ドキュメント作成
PHPスクリプトの開始と終了

一般的なPHPタグ

<?php
 ここにPHPスクリプトを記述
?>
コメントアウト

  1. 「//」以降、行末(改行)まで。(C++形式)
  2. 「#」以降、行末(改行)まで(シェル・Perl形式)
  3. 「/*」以降「*/」まで。間に改行を含む事ができます。(C形式)

文字列リテラル(string literal)

  • 「" "」「' '」引用符で囲んで記述する
  • ヒアドキュメント

PHPで文字を表示する

PHPスクリプトで文字を表示するには「print()」か「echo()」を使います。

  • echo()もprint()も「その後に続く文字をブラウザに出力」する命令
print()
  • 文字列を出力するという命令
  • echo()とほぼ同じ
  • JavaScriptでの「document.write」と同じ役割


  1. print ('文字');
  2. echo '文字';

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>001</title>
</head>
<body>
<?php
    print ('こんにちは'."\n");
?>
</body>
</html>


このとき「\n」は、HTMLのソースコードの整形のため入力します。

エスケープシーケンス(escape sequence)

  • 1文字では表せない特殊な文字

エスケープシーケンス 意味している文字
\t 水平タブ
\n 改行
\r 復帰
\" "
\\ \
\$ $
\ooo 8進数ooo文字コードをもつ文字
\xhh 16進数hhの文字コードをもつ文字

改行処理

  1. ブラウザ上での改行は'<br>'を入れる
  2. ソース上での改行は"\n"を入れる

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>クォートの選択</title>
</head>
<body>
<?php
 print ("ダブルクォートで特殊文字の「\\n」を出力します。<br>\n");
 print 'シングルクォートの場合は「\n」はそのまま出力されます。';
 print ("\n");
?>
</body>
</html>


《ダブルクォートの場合》

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ダブルクォートの選択</title>
</head>
<body>
<?php 
 print ("<ul>\n");
 print ("<li>WordPress</li>\n");
 print ("<li>Joomla</li>\n");
 print ("<li>EC-Cube</li>\n");
 print ("</ul>\n");
?>
</body>
</html>  


《シングルクォートの場合》

<?php 
 print ('<ul>'."\n");
 print ('<li>WordPress</li>'."\n");
 print ('<li>Joomla</li>'."\n");
 print ('<li>EC-Cube</li>'."\n");
 print ('</ul>'."\n");
?>
ヒアドキュメント(here document)を出力する

ヒアドキュメントは、名前をつけた文字列を出力する。



<<< PAGE


PAGE;


開始IDの注意点

  1. 開始IDの前後に全角空白があるとIDはその空白も含めたものになる
  2. 開始IDの後ろにタブと半角スペースは入れられない
  3. <<< とIDの間にはタブと半角スペースを入れられる
  4. 開始IDの後ろにはコメントもつけられない


終端IDの注意点

  1. 終端IDは必ず行頭に置かなくてはならない
  2. 終端IDの行には「;」(セミコロン)以外置いてはならない
  3. タブやスペースでのインデントもセミコロンの前後に空白も不可
  4. コメントもつけられない
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<?php 
 print <<< PAGE
 <ul>
 <li>WordPress</li>
 <li>Joomla</li>
 <li>EC-Cube</li>
 </ul>
PAGE;
?>
</body>
</html> 

数値リテラル

  • 「" "」「' '」で囲んで記述しない
  • 整数リテラル(integer literal)
  • 不動小数点数リテラル(floating-point literal)
  • 8進数:数値の先頭に 0 をつける
  • 16進数:数値の先頭に 0x をつける
<!DOCTYPE html>
<html lang="ja")>
<head>
<meta charset="UTF-8")>
<title>数値リテラル</title>
</head>
<body>
<?php
 print ('<ul>'."\n");
 print ('<li>10進数の10は');
 print 10;
 print ('</li>'."\n");
 print ('<li>8進数の10は');
 print 010;
 print ('</li>'."\n");
 print ('<li>16進数の10は');
 print 0x10;
 print ('</li>'."\n");
 print ('<li>16進数のFは');
 print 0xF;
 print ('</li>'."\n");
 print ('</ul>'."\n");
?>
</body>
</html> 


10進数 2進数 8進数 16進数
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
18 10010 22 12
19 10011 23 13
20 10100 24 14

変数(variable)とは

  • 変数はプログラム中のメモリ領域に付けた名前です
  • さまざまな値を一時的に記憶しておくために使われます
変数の型(type)

名前 説明
integer 整数

float

double

浮動小数点数
string 文字列
boolean 論理型(true/false)

変数の定義

  • $(ドル記号)で始める
  • 変数宣言や型の宣言は必要ない
  • 英・数・アンダースコアのいずれかを用いる(特殊な記号は使用できない)
  • 数字で始めることはできない
  • 大文字と小文字を区別する

変数に値を代入(assignment)する

$product = '鉛筆';
文字列に変数を埋め込む
  • 文字列は「" ダブルクォート」で囲む(シングルクォートでは、そのまま表示されてしまう)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>文字列に変数を埋め込む</title>
</head>
<body>
<?php
 $product = '消しゴム';
 print ('{$product}を販売しています。'."\n");
?>
</body>
</html> 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>変数を使う</title>
</head>
<body>
<?php
 $product = '鉛筆';
 print ($product);
 print ('を販売しています。'."\n");
?>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>複数の変数</title>
</head>
<body>
<?php
 $product = '消しゴム';
 $num = 10;
 print ("{$product}".''."{$num}".'個販売しています。'."\n");
?>
</body>
</html> 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>変数を演算する</title>
<style>
table {
  width: 300px;
  border-collapse: collapse;
}
th {
  background-color: #CCC;
}
th,td {
  padding: 6px;
}
</style>
</head>
<body>
<?php
$product = '消しゴム';
$num = 10;
$price = 50;

$total = $price * $num; //$numと$priceの値をかけ合わせたものを$totalに代入します
$total = $total - 100; //$totalから100減じたものを$totalに代入します
?>
<table border="1">
<tr><th>内容</th><th>金額</th></tr>
<?php
 print ('<tr><td>品名</td><td>'."{$product}".'</td></tr>'."\n");
 print ('<tr><td>単価</td><td>'."{$price}".'円</td></tr>'."\n");
 print ('<tr><td>個数</td><td>'."{$num}".'個</td></tr>'."\n");
 print ('<tr><td>計</td><td>'."{$total}".'円(但100円引)</td></tr>'."\n");
?>
</table>
</body>
</html> 

if文(if statement)

  • 「条件」の値(trueまたはfalse)に応じて処理を行う
  • このような文を条件判断文(conditional statement)と呼びます。
  • if文は、条件判断文のひとつ



if(条件){
 文
}

複数の文を処理するif文
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>複数の文を処理するif文</title>
</head>
<body>
<?php 

$num = 10;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

if ($num > 0) {
   print ('いらっしゃいませ。在庫があります。<br>'."\n");
   print ('在庫数は'."{$num}".'です。'."\n");
}

 print ('<hr>'."\n");
 print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 
if〜else文とは
  • if文のバリエーションとして、条件が false の場合に指示した文を実行させる。



if(条件){
 文1;
else
 文2;
}

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>if〜elseif〜else文を使う(10の場合)</title>
</head>
<body>
<?php 

$num = 10;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

if ($num <= 0) {
   print ('在庫切れです。'."\n");
} elseif ($num <= 3) {
   print ('在庫が僅少です。'."\n");
} else {
   print ('在庫があります。'."\n");
}

 print ('<hr>'."\n");
 print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>if〜elseif〜else文を使う(2の場合)</title>
</head>
<body>
<?php 

$num = 2;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

if ($num <= 0) {
   print ('在庫切れです。'."\n");
} elseif ($num <= 3) {
   print ('在庫が僅少です。'."\n");
} else {
   print ('在庫があります。'."\n");
}

 print ('<hr>'."\n");
 print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 
if〜elseif〜else文とは
  • if文に2つ以上の条件を判断させて処理する



if(条件1){
 文1;
 文2;
} elseif(条件2)
 文3;
 文4;
} elseif(条件3)
 …
} elseif(条件4)
 …
}

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>if〜elseif〜else文を使う(0の場合)</title>
</head>
<body>
<?php 

$num = 0;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

if ($num <= 0) {
   print ('在庫切れです。'."\n");
} elseif ($num <= 3) {
   print ('在庫が僅少です。'."\n");
} else {
   print ('在庫があります。'."\n");
}

 print ('<hr>'."\n");
 print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 

endifを使う

  • 条件のあとに「:」コロンをつける
  • endifのあとに「;」セミコロンをつける
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>endifを使う</title>
</head>
<body>
<?php $num = 10; ?>
ようこそ。
<hr>
<?php if ($num <= 0): ?>
在庫切れです。
<?php elseif ($num <= 3): ?>
在庫が僅少です。
<?php else: ?>
在庫があります。
<?php endif; ?>
<hr>
ごゆっくりお過ごしください。
</body>
</html> 

switch文(switch statement)とは

  • if文と同じように、条件によって処理をコントロールする



switch(式){
 case 定義1;
  文1;
  …
  break;
 case 定義2;
  文2;
  …
  break;
 default;
  文D;
  …
  break;
}


どれにも当てはまらない場合(式の評価がされなかった場合)に「default」を実行します。
「default」は、省略も可能です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>switch文を使う</title>
</head>
<body>
<?php 

$num = 10;

print ('ようこそ。'."\n");
print ('<hr>'."\n");

switch($num) {
   case 0:
   print ('在庫切れです。'."\n");
   break;

   case 1:
   case 2:
   case 3:
   print ('在庫が僅少です。'."\n");
   break;

   default: 
   print ('在庫があります。'."\n");
   break;
}

print ('<hr>'."\n");
print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 

論理演算子(logical operator)とは

  • 条件をさらに評価して、true または false の値を得る
<?php
5 > 3 && 3 == 4; //この条件はfalseです
$a == 6 || $a >= 12; //この条件は変数$aの値が6または12以上の時にtrueになります
!($a == 6); //この条件は変数$aの値が6以外の時にtrueになります
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>論理演算子を使って条件を記述</title>
</head>
<body>
<?php 

$num = 0;
$store = true;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

if($num >=  0 && $store == true) {
   print ('お取り寄せ可能です。'."\n");
}
else if($num ==  0 && $store == false) {
   print ('在庫切れです。'."\n");
}
else if($num <= 3){
   print ('在庫が僅少です。'."\n");
}
else{
   print ('在庫があります。'."\n");
}

 print ('<hr>'."\n");
 print ('ごゆっくりお過ごしください。'."\n");

?>
</body>
</html> 

条件演算子

  • if文を使わなくても、条件演算子(conditional operator)の「?:」を使って記述する



条件」? true のときの式1: false のときの式2

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>条件演算子</title>
</head>
<body>
<?php 

$num = 10;

 print ('ようこそ。'."\n");
 print ('<hr>'."\n");

$msg = ($num>0) ? '在庫があります。' : '在庫がありません。'; 

 print ($msg."\n");

?>
</body>
</html> 

for文とは

  • 繰り返し文の一種
  • 処理を繰り返し実行する繰り返し文(loop statement)



for(初期化の式1;繰り返すかを調べる式2;変化のための式3)
  文;

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>for文を使う</title>
</head>
<body>
<?php 
 print ('<hr>'."\n");

for($i=0; $i<5; $i++) {  //変数$iを1つずつ増やしながら$i<5がfalseとなるまで
   print ('商品を表示します。<br>'."\n"); //この文が繰り返されます
}

 print ('<hr>'."\n");
 print ('商品は以上です。'."\n");
?>
</body>
</html> 
for文を応用する
  • カウンタ変数をループ内で使う
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>繰り返し回数分を出力する</title>
</head>
<body>
<?php
 print ('<hr>'."\n");

for($i=0; $i<5; $i++) {
   print ('商品'."{$i}".'を表示します。<br>'."\n");
}

 print ('<hr>'."\n");
 print ('商品は以上です。'."\n");

?>
</body>
</html> 
for文を応用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>繰り返し回数を出力する</title>
</head>
<body>
<table border="1">
<tr><th>イメージ</th><th>商品名</th></tr>
<?php 
for($i=0; $i<5; $i++) {
   print ('<tr>');
   print ('<td><img src="'."{$i}".'.jpg"></td><td>商品'."{$i}".'</td>');
   print ('</tr>'."\n");
}
?>
</table>
</body>
</html> 

while文(while statement)とは

  • 条件がtrueである限り、指定した文を繰り返し処理する



while(条件){
  文;
  …
}

「商品が存在する」という条件がfalseになるまで、商品を表示することを繰り返します。
while文では処理を始める前に、商品が存在しなければ商品を表示する処理はおこなわれません。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>while文を使う</title>
</head>
<body>
<?php 
 print ('<hr>'."\n");

$i = 0;

while($i < 5) {
   print ('商品'."{$i}".'を表示します。<br>'."\n");
   $i++;
}

 print ('<hr>'."\n");
 print ('商品は以上です。'."\n");
?>
</body>
</html>


この処理内容は、以下のfor文の処理とまったく同じです。
このwhile文では、条件 $i < 5 が false になるまで繰り返し続けているからです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>繰り返し回数を出力する</title>
</head>
<body>
<?php
 print ('<hr>'."\n");

for($i=0; $i<5; $i++) {
   print ('商品'."{$i}".'を表示します。<br>'."\n");
}

 print ('<hr>'."\n");
 print ('商品は以上です。'."\n");

?>
</body>
</html> 


ブロック内では条件が false に近づくように、変数 $i の値をインクリメントしています。


一般的に「繰り返し文」では、繰り返しをするかしないかを判断するための条件が変化するようにしておかないと、永遠に繰り返し処理が行われることになってしまいます。


以下の文の場合条件が変化しないため、何度繰り返しても false になりません。

  • while文の処理が永久に繰り返されプログラムが終了しなくなってしまいます。
$i = 0;
while($i < 5){
   print ('商品{$i}を表示します。<br>'."\n");
}

do〜while文(do-while statement)とは

  • 最後に指定した条件が true である限り、ブロック内の処理を繰り返す



do {
  文
  …
}while(条件); //条件がtrueであれば繰り返しを続けます


do〜while文がwhile文と異なるところは、


条件を判断する前にブロック内の処理を行う


ということです。

  • while文では、繰り返し処理の最初に条件が false であれば、一度もブロック内の処理が行われません
  • do〜while文では、最低1回は必ずブロック内の処理が行われます
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>do〜while文を使う</title>
</head>
<body>
<?php 
 print ('<hr>'."\n");

$i = 0;

do {
   print ('商品'."{$i}".'を表示します。<br>'."\n");
   $i++;
} while ($i < 5);

 print ('<hr>'."\n");
 print ('商品は以上です。<br>'."\n");
?>
</body>
</html> 

ネストとは

  • 条件判断文・繰り返し文などの構文では、複数の文を埋め込んでネスト(入れ子)にすることができます



for(式1-1; 式2-1; 式3-1) {
  …
  for(式1-2; 式2-2; 式3-2) {
    …
  }
}

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>for文をネスト</title>
</head>
<body>
<table border="1" width="200">
<tr><th>iの値</th><th>jの値</th></tr>
<?php 

for($i=0; $i<5; $i++){
   for($j=0; $j<3; $j++){
      print ('<tr><td>{$i}</td><td>{$j}</td></tr>'."\n");
   }
}

?>
</table>
</body>
</html> 
  • 内側3回、外側5回の処理を実行しています
if文と組み合わせる
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>if文と組み合わせる</title>
</head>
<body>
<?php

$ch = 0;

for($i=0; $i<5; $i++) {
   for($j=0; $j<5; $j++) {
      if($ch == 0) {
         print ('<img src="img/'. "{$ch}" '.jpg">');
         $ch = 1;
       } else {
         print ('<img src="img/'. "{$ch}" '.jpg">');
         $ch = 0;
      }
   }
   print ('<br>'."\n");
}

?>
</body>
</html> 
  • 2つの画像を準備します
  • 2つのfor文と1つのif〜else文を使っています
  • どちらかを出力するたびに、変数 $ch に交互に「0」と「1」を代入します
  • 次にどちらの画像を出力するかを if文中の「$ch == 0」という条件を評価することで判断します
まとめ
  • <?php...?>で囲まなければならない
  • 拡張子は「.php
  • インタプリタ型の言語(テキストエディタで記述したソースコードをそのまま実行することができる)
  • 「HTML埋め込み型」の記法を採用している
  • 命令文の区切りは「;セミコロン」を付ける必要がある
  • 命令文では大文字/小文字の区別はしない
  • 「print」は基本命令のひとつで「文字列を出力」します