基本

<?php ... ?>

PHPファイル内にはHTMLも共存できる。

<?php
  // 処理
?>

PHPの終了タグはファイルの終了なら省略可能。

行末のセミコロン

行末にはセミコロンを付ける

<?php
  echo "Hello, world!";
?>

文字列の表示

文字列を出力

echo "Hello, world!";
echo $message;
echo 10 / 5;

末尾に改行はされない。

フォーマット化された文字列を出力

printf("文字列", 変数1, 変数2...);

$s = 'banana';
$n = 40;
$p = 5.23;
printf("We have %d $ss for $%.2f", $n, $s, $p);    # We have 40 bananas for $5.23
%d 整数
%f 浮動小数点数
%s 文字列

%5dと書くと、5桁まで表示する。

%05dと書くと、5桁まで表示する(5桁に満たない場合は0をつける)。

%.2fと書くと、小数点以下2桁まで表示する。

sprintfを使うと、文字列を表示するのではなく、返すだけになる。

変数のデータ型も含めて内容を表示

var_dump($message);

コメント

1行コメント

// コメント
# コメント

複数行コメント

/* コメント */

入れ子にはできない。

変数 / データ型

変数を代入

$message = "Hello, world!";
  • $から始まる
  • 英数字とアンダーバーが使用可能
  • $の後は数字は使えない
  • 大文字小文字は区別される

変数を取得

echo $msg;
echo "$msg";
echo "${msg}";

定数を代入

define("ADMIN_EMAIL", "example@gmail.com");

定数名はすべて大文字。

使用するときはそのまま書く:

echo ADMIN_EMAIL;

データ型

  • 文字列
  • 数値(整数・小数)
  • 配列
  • オブジェクト
  • 論理値(true / false
  • null(空データ)

文字列のダブルクォーテーションとシングルクォーテーション

変数展開 特殊文字(\n, \t
ダブルクォーテーション
シングルクォーテーション × ×

演算子

代数演算子

+ 加算
- 減算
* 乗算
/ 除算
% 剰余(除算の余り)

()で優先順位を指定可能。

文字列演算子

. 連結
echo "Hello, " . "world!";

単項演算子

加算子(インクリメント) / 減算子(デクリメント)

$変数++ 1を加え、変数を返す
++$変数 変数を返し、1を加える
$変数-- 1を引き、変数を返す
--$変数 変数を返し、1を引く

代入演算子

短縮した演算子 意味
x += y; x = x + y;
x -= y; x = x - y;
x *= y; x = x * y;
x /= y; x = x / y;
x %= y; x = x % y;
x .= y; x = x . y;

比較演算子

== 等しい
!= 等しくない
== 厳密に等しい
!= 厳密には等しくない
> 左が右より大きい
< 左が右より小さい
>= 左が右以上
<= 左が右以下

厳密に等しい・等しくないとは、型も含めて比較する。

論理演算子

&& AND
|| OR
! NOT

例:

score < 80 && score > 60    // 60より大きく80より小さい

条件分岐

if

if (条件) {
  真の場合の処理
}
if (条件) {
  真の場合の処理
} else {
  偽の場合の処理
}
if (条件) {
  真の場合の処理
} elseif (条件) {
  真の場合の処理
} else {
  偽の場合の処理
}
if (条件):
  真の場合の処理
endif;
if (条件):
  真の場合の処理
else:
  偽の場合の処理
endif;
if (条件):
  真の場合の処理
elseif (条件):
  真の場合の処理
else:
  偽の場合の処理
endif;

例:

$age = 23;
if ($age > 20){
  echo "ok"
}

三項演算子

変数 = (条件) ? b : c

例:

b, c = 10, 20
a = (b > c) ? b : c    # 大きい方をaに代入

switch

変数が値に一致した場合に実行する

switch (オブジェクト) {
  case '値':           # 値に一致した場合
    処理
    break;
  case '値':           # 複数の値を指定することも可能
  case '値':
    処理
    break;
  default:               # どの値にも一致しない場合
    処理
    break;
}

例:

$signal = 'red'
switch ($signal) {
  case 'red':
    echo 'stop!';
    break;
  case 'blue':
  case 'green':
    echo 'go!';
    break;
  case 'yellow':
    echo 'caution!'
    break;
  default:
    echo 'wrong signal!';
    break;
}

繰り返し

while

条件が真の間繰り返す

while (条件) {
  処理
}

例:

$i = 0;
while ($i < 3) {
  echo $i;
  $i++;
}

do-while

条件が真の間繰り返す

do {
  処理
} while (条件);

例:

$i = 0;
do {
  echo $i;
  $i++;
} while ($i < 3);

最低1回は実行される。

for

繰り返す

for (変数初期化; 条件; 終了後の処理) {
  処理
}

例:

for ($i = 0; $i < 10; $i++) {
  echo $i;
}

break

ループから抜ける

continue

ループを1回スキップ

foreach(配列)

配列をループ

foreach ($配列 as $変数){
  処理
}

例:

foreach ($youbi as $y){
  echo $y;
}

foreach(連想配列)

連想配列をループ

foreach ($連想配列 as $変数1 => 変数2){
  処理
}

例:

foreach ($sales as $key => $value){
  echo $key, $value;
}

配列

配列の代入

$youbi = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

配列の指定番目の要素を取得

echo $youbi[0];

添字は0から始まる。

配列の値を変更

$youbi[0] = "Sunday";

配列の末尾に要素を追加

$youbi[] = "Sun";

要素を削除

unset($youbi[1]);

他の要素の添字は変更されない。

連想配列

連想配列の代入

$sales = array("yamada"=>100, "tanaka"=>200);

配列の指定キーの要素を取得

echo $sales["yamada"];

配列の値を変更

$sales["yamada"] = 300;

要素を削除

unset($sales["yamada"]);

関数

関数の定義

function 関数名($変数1, $変数2...) {
  処理
}

例:

function hello($name) {
  echo "Hello, $name";
}

関数の実行

関数名(引数1, 引数2...);

例:

hello("yamada");

返り値

関数内でreturnを使用して、返り値を指定できる。

return 'Hello!';

初期値

関数呼び出し時に引数が設定されなかった場合の値

function($変数 = 初期値) {
}

例:

function($name = "yamada") {
}

返り値付き関数の実行

$foo = hello();
echo hello();

ローカル変数

関数内で宣言した関数は、その関数内でしか利用できない。また、関数外の変数を関数内では利用できない。

組み込み関数

文字列関数

関数 説明 備考
strlen(s) バイト数
strpos(s, c) 指定文字の出現場所 添字は0から始まる
substr(s, n1) 指定文字目以降
substr(s, n1, n2) 指定文字目から指定文字数 -は末尾から
添字は0から始まる
str_replace(s1, s2, s3) s3の中のs1をs2に置換

mb_strlen(s)のようにmb_をつけると、マルチバイト文字に対応する。

数学関数

abs(n) 絶対値
ceil(n) 切り上げ
floor(n) 切り捨て
round(n) 四捨五入
pi() 円周率
mt_rand(n1, n2) 乱数 指定範囲内

配列関数

count(a) 要素数
sort(a) 並べ替え
in_array(ns, a) 存在するか true / false
implode(s, a) 配列を指定区切り文字で出力
explode(s, a) 配列に指定区切り文字で変換

日付/時刻関数

time() 現在時刻をUNIX出力
mktime(時, 分, 秒, 月, 日, 年) 指定時刻をUNIX出力
strtotime(時, 分, 秒, 月, 日, 年) 指定時刻をUNIX出力
date(s, t) 指定フォーマットに変換 tを省略時は現在時刻

時刻はPHPではUNIXタイムスタンプで扱われる。

strtotimeの指定可能書式
2001/01/01 00:00:00 now
2001-01-01 00:00:00 tomorrow
Jan 1, 2001 00:00:00 +2 day
1 Jan 2001 00:00:00 last Monday
2014-2-4 1.14 pm next Month
dateの指定可能書式
例:date("Y-m-d H:i:s")
d 2桁の日 L うるう年(0/1)
j 1-2桁の日 Y 年(4桁)
D 3文字の曜日 y 年(2桁)
l(小L) 曜日 a am / pm
w 曜日(日0-月6) A AM / PM
N 曜日(月1-日7) g 12時間制の時(1-12)
S 序数(st,nd,rd,th) G 24時間制の時(0-23)
z 年間通算日(0-365) h 24時間制の時(01-12)
W 年の週番号 H 24時間制の時(00-23)
F 英語月 i 分(00-59)
M 英語月(3文字) s 秒(00-59)
m 月(01-12) c 2001-01-01T00:00:00+00:00
n 月(1-12) r Mon, 01 Jan 2001 00:00:00 +0000
t 月の日数(28-31) U UNIX秒(1970/1/1からの秒数)

ファイル読み書き

ファイルの書き込み

$file = 'test.txt';
$contents = 'text'
file_put_contents($file, $contents);

fopen(), fwrite(), fclose()を自動で実行する。ファイルが存在しない場合は作成し、存在する場合は上書きする。

フラグも使用できる(FILE_APPEND:追記、LOCK_EX:同時書き込み禁止):

file_put_contents($file, $contents, FILE_APPEND | LOCK_EX);

ファイルの読み込み

$contents = file_get_contents("test.txt");
$contents = file_get_contents("http://www.example.com/");

ファイルを読み込んで1行ごとに配列で返す

$contents = file("test.txt");

フォーム処理

HTMLのPOSTからPHPにデータを受け取る

<form action="get_info.php" method="post">
  <input type="text" name="birthday" value="">
  <input type="submite" value="送信">
</form>
<?php
$birthday = $_POST['birthday'];
$youbi = date("l", strtotime($birthday));
?>

<!DOCTYPE html>
<meta charset="UTF-8">
<title>PHP</title>
<p><?php echo htmlspecialchars($youbi); ?></p>

文字をエスケープするためにhtmlspecialchars()を使う。