PHP: Hypertext Preprocessor

Web アプリケーションの開発に適したオープンソース(無償)の開発言語です。
Yahoo!などの大手ポータルサイトが利用したため、
日本では最もポピュラーなWebシステム開発言語の1つとなっています。

PHPタグ

PHPはHTMLの中に<?php  ?>というタグでプログラムを記述できます。
そのため、非常に簡単にWebシステムを開発することが可能です。
以前は<?  ?>という短いタグも使われていましたが、
最新のPHPでは標準ではサポートされていませんので、ご注意ください。

ステートメントの区切り

PHPはC言語やPerlと同様に、ステートメントの区切りにセミコロンを使用します。
よくセミコロンを付け忘れて、次の行がエラーになって「何故?」と初心者が悩むことがありますので、
エラーが起きたときには、まずセミコロンを付け忘れていないかチェックする習慣を見に付けてください。
<?php
    echo 'Hello World';
    echo '前の行でセミコロンを忘れるとこの行でエラーになります。';
?>

コメント

PHPには3つのコメント方法があります。
<?php
// C++と同様の単一行コメント
# シェルと同様の単一行コメント
echo "単一行コメントはステートメントの後ろにも記述できます。"; // コメント
/*
Cと同様の
複数行コメント
*/
?>

変数の命名規則

PHPの変数は先頭に$を付けます。
変数に使える文字は、英字・数字・アンダースコアです。
$に続く先頭文字には数字は使えません。
$var_data = 'abc';

定義済の変数

主なものとして以下のような変数があります。
$_SERVER — サーバー情報
$_GET — URLのパラメタとして受け取る変数
$_POST — フォームのデータとして受け取る変数
$_SESSION — ページ間に渡って保持できる変数
$_ENV — OSの環境変数
$_COOKIE — クッキー情報

変数の宣言と型

PHPでは変数の宣言文はありません。
従って型宣言もなく、変数の型は代入や計算のときに自動変換されます。
$var = "02"; // 文字列として代入します。
$var2 = $var * 3; // $varの値が数値に変換されて、$var2は6になります。
※6は数値、"6"または'6'は文字列です。

文字列

文字列はシングルクオートまたはダブルクオートで文字をくくります。
文字と文字の連結にはドットを使います。
$var = "abc" . '123';
ダブルクオートの場合は、中に含まれる変数が値に変換されます。
echo '$var'; // $varが表示されます。
echo "$var"; // abc123が表示されます。
長い文章を扱うときは、ヒアドキュメントも使えます。
$var = <<<EOT
長い文章
'シングルクオートや"ダブルクオートも入れられます。
$var 変数は展開されます。
$var日本語、このように変数の後ろに2バイト文字をくっつけると、
変数名の続きとみなされて、思うように表示されませんので注意してください。
EOT;

論理型 (boolean)

定数 TRUE または FALSE を指定します。
大文字小文字は区別しません。True, False でもOKです。
否定には ! を使います。
論理積には、and または && を使います。
論理和には、or または || を使います。
空文字やゼロもfalseになりますが、三項演算子を使うことでfalseと区別することができます。
if (0 == false) ... // マッチします。
if (0 === false) ... // マッチしません。
関数が結果によって0やfalseを返すときなどに区別する必要があります。

配列 (array)

通常の配列
$array1 = array(); // 空の配列を作成します。
$array1[] = "a"; // 値を最後に追加します。 $array1[] = "b"; // 値を最後に追加します。 以下の1行は上の3行と同じ結果になります。 $array1 = array("a", "b");
連想配列
$array2 = array(); // 空の配列を作成します。
$array2["key_a"] = "data_a"; // キーと値を追加します。 $array2["key_b"] = "data_b"; // キーと値を追加します。 以下の1行は上の3行と同じ結果になります。 $array2 = array("key_a" => "data_a", "key_b" => "data_b");
配列の中に配列を入れることで多次元配列などを実現できます。
$array2["array1"] = $array1;
配列の全データを操作するときは、foreach()を使います。
foreach ($array2 as $key => $value) {   // 連想配列の操作
  if (is_array($value)) {               // 値が配列か判定する
    foreach ($value as $value2) {       // 通常配列の操作
      echo "$kwy $value value2";
    }
  } else {
    echo "$kwy $value";
  }
}

グローバル変数

TOPレベルで宣言(値を代入)された変数がグローバル変数となります。
関数内で宣言(値を代入)された変数はローカル変数となります。
関数内でグローバル変数にアクセスしたいときは、globalステートメントを使用します。
$a = 1;
function test() {
  global $a;
  echo $a;   // 1が表示されます。
}

制御構造


if ($x > $y) echo "xはyより大きいです。"; // 実行ステートメントが1行の場合は{}を省略できます。
if ($x > $y) {
  echo "xはyより大きいです。";
  $max = #x;
}
for ($i = 0; $i < 10; $i++;) {
  if (2 == $i) continue; // それ以降を飛ばして次のloopへ移ります。
  if (4 == $i) break; // すぐにloopを抜けます。
  echo "i = $i\n"; // 0, 1, 3 が表示されます。
}

エラーメッセージ


ini_set( 'display_errors', 1 ) を設定すると、軽度なエラーメッセージを画面に出すことができます。
セキュリティ上、外部サービスシステムの本番ではオフにしてください。

■プログラム
<?php
ini_set( 'display_errors', 1 ); // エラーを画面に出す。
echo " OK";
echo " $a NG";
?>

■実行結果
OK Notice: Undefined variable: a in /home/www/xxx/htdocs/test.php on line 4 NG

$aが未定義(値が代入されていない)というエラーメッセージです。
プログラムは続行されます。

■プログラム
<?php
ini_set( 'display_errors', 1 ); // エラーを画面に出す。
$a = 1
echo " OK";
echo " $a NG";
?>
■実行結果
このページは動作していません
xxx では現在このリクエストを処理できません。
HTTP ERROR 500

重大なエラーが発生した場合は、画面には上記のようなメッセージが表示されます。
このような場合は、apacheのエラーログを参照します。

■エラーログ
[root@www log]# tail error.log
[Thu Oct 19 18:46:16 2017] [error] [client 61.213.223.61] PHP Parse error: syntax error, unexpected T_ECHO in /home/www/xxx/htdocs/test.php on line 4

4行目で unexpected T_ECHO というエラーになっていますが、
これは3行目にセミコロンがないため、
PHPがまだステートメントが続いていると解釈して、
次の行で予期せぬ文字(echo)が現れたのでエラーとなっています。
このように必ずしもエラーが出ている行に問題があるとは限りません。