- クラス
- 名前空間
- エラー
- 例外
- ジェネレータ
- 組み込みグローバル変数, 定数, 関数など
- 終了タグには自動で
;
が末尾に付与される。- JS と比べて
;
は重要。
- JS と比べて
- HTML 構文を使用しない場合は
?>
を省略していい。
<?php echo 1 + 2 + 3 ?>
<?= 1 + 2 + 3 ?>
<?php if ($value == true): ?>
<p> value is TRUE </p>
<?php else: ?>
<p> value is FALSE </p>
<?php endif; ?>
<?php
echo 1 + 2 + 3;
// aaaa
/* aaaa */
# aaaa
echo "aaaa";
$a = [1 => 2, 3.4 => 5.6, "7" => 890];
// 指定した変数に関する情報を出力
print_r($a);
// 変数の文字列表現を出力
var_export($a);
// 変数に関する情報をダンプ
var_dump($a);
- 型キャストは
(型名) $value
のようにする。int
,bool
,float
,string
,array
,object
,unset
,binary
が使える。b"aaa"
は(binary) "aaa"
と同じ- 比較表
category | type | example | note |
---|---|---|---|
スカラー | bool | TRUE, FALSE | 大小文字区別がないので tRuE でも通る |
スカラー | int | 1, 01, 0x1, 0b1, 1_0 | 左から 10 進, 8 進, 16 進, 2 進, カンマ代わり |
スカラー | float(double) | 1.2, 1.2e3, 1E-2, 1_2.3_4 | 1._2 はできない |
スカラー | string | "a", 'a' | ' で囲むと特殊文字が使えない変数を埋め込むには "$a" のように直接書けばいい"${a}" のように明示的に書くこともできる基本的には \ を前置すればエスケープされる。\r\n\t 勿論可能。正規表現は JS と違って専用の型は無いので、 ' で囲んで特殊文字を使用する。'/php/i' |
複合 | array | [1, 2] , ["x" => 1] , array( "x" => 1) |
キー名はスカラー型のどの値でも使える。1.5 => [2 => "z", "x", "y"] のように一部の要素にだけキー指定できる取得時、キー名が文字列の場合は $arr["key"] のようにする。 |
複合 | object(class) | (object) ["x" => 1] ,class c{}; $c = new c; |
取得時、$obj->param のように取得する |
複合(疑似) | callback(callable) | function($a){return $a;} , fn($a) => $a; |
コールバック関数には無名関数もパラメータとして渡せる |
複合 | iterable | ? | foreachで繰り返し可能な関数? |
特殊 | resource | ? | 外部リソースの参照用? |
特殊 | NULL | NULL, null | bool と同じく大小文字区別なし |
疑似 | mixed | ? | 引数に様々な型を使えるという事 |
疑似 | number | ? | int または float の事 |
疑似 | array|? | object | array または object の事 |
疑似 | void | ? | 返り値がない事 |
- 配列には次の演算子を使用可能:
+
,==
,===
,<>
,!=
,!==
code | example | description |
---|---|---|
= ,+ ,- ,++ ,-- ,* ,/ ,% ,** |
- | 代入,加算,減算,加算子,減算子,乗算,除算,剰余,累乗+$a のようにすると number 型に変換する |
= & |
$a = 3; $b = &$b; |
参照渡し。new はデフォで参照が渡るため &new はできない |
& ,` |
, ^, ~, <<, >>` |
- |
&& ,and ,` |
, or, xor, !` |
|
== ,=== ,<> ,!= ,!== |
- | 等しい,厳密に等しい,異なる,異なる,厳密に異なる |
> ,< ,>= ,<= |
- | 大なり,小なり,大なり=,小なり= |
<=> |
$a <=> $b |
宇宙船演算子 a が b より大きいなら 1、小さいなら -1、同じなら 0 が返る |
? : |
- | 三項演算子 |
?? |
$x = $a ?? $b; |
NULL合体演算子 a が NULL なら b が返る |
@ |
$x = &$a["x"]; |
エラー制御演算子 例えば $a["x"] が存在しなくてもエラーにならない |
` |
echo |
実行演算子 OS のコマンドを実行して シェルやバッチの出力結果を取得できる |
. |
"a".(1 + 1)."b" |
文字列結合.= のようにすると文字列の加算代入が可能 |
<<< |
<<<ID <<<'ID' |
ヒアドキュメント。JS で言うテンプレートリテラル 末尾につけるID名は EOD , EOM , EOF を使うのが一般的前者は " 後者は ' で書かれた文字列として評価されるので、それぞれ H ello! , H\tello! になる |
{} |
"{$val}" "{$func()}" |
文字列内で変数・関数を指定する。 JS と異なり、 "${1 + 1}" はできない。 |
${} |
"${val}" |
文字列内で変数を明示的に指定する。関数は使用できない 括弧内には $ が付かないことに注意 |
new |
- | クラスのインスタンス作成 |
class |
class C {} |
クラスの宣言 |
interface |
interface I { const X = 1; } |
型定義 |
implements |
class C implements I {} |
クラスの宣言に型を使用 |
instanceof |
$a instanceof C |
使用されたインスタンス・インターフェイスを調べる |
-> |
$a->b |
クラスやオブジェクトのプロパティにアクセスする |
:: |
$a::b |
static, 定数 およびオーバーライドされたクラスのプロパティやメソッドにアクセスする |
- if, while, for, foreach, switch では
{}
を使わなくても書ける構文が用意されている。{
を:
に置き換え、}
を専用の構文に差し替える。endif
,endwhile
,endfor
,endforeach
,endswitch
if (1) { echo "hoge"; } if (1): echo "hoge"; endif;
- ワンライナーも可能
例:
if (1) echo "hoge"; elseif (2) echo "fuga"; else echo "foo";
if (1) {
echo "hoge";
} elseif (2) {
echo "fuga";
} else {
echo "foo";
}
if (1) echo "hoge"; elseif (2) echo "fuga"; else echo "foo";
switch ($i) {
case "apple":
case "bar":
echo "i am any";
break;
case "cake":
echo "cake is a lie";
break;
default:
echo "aaaaaaaa";
}
- for, while では
break
,continue
が使えるbreak 1;
のように引数指定することで処理をスキップするループ構造のレベルの数を指定できる。- デフォは 1 (現在のループ終了地点)
// $i = 1;
while ($i <= 10) {
echo $i++;
}
// $i = 0;
do {
echo $i;
} while ($i > 0);
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) break;
echo $i;
}
// $a = [1, 2, 3, 4];
foreach ($a as &$b) {
$b = $b * 2;
}
foreach ([1, 2, 3, 4] as &$b) {
$b = $b * 2;
}
// $a = ["x" => 1, "y" => 2, "z" => 3];
foreach ($a as $k => $v) {
echo "\$a[$k] => $v\n";
}
- 指定する値は直接指定でなければならない
declare(strict_types=1) {
// ...
}
/* 上下どちらも同じ */
declare(strict_types=1);
// ...
- JS でいう所の
require
,module.exports
include
と同じような使い方でinclude_once
,require
,require_once
も使用可能- include_once: 既に読み込まれている場合は再読み込みを行わない
- require: 失敗すると処理が中断される
- require_once: include_once + require
// color.php
<?php $color = 'green'; ?>
// fruit.php
<?php return 'apple'; ?>
// test.php
<?php
include 'color.php';
$fruit = include 'fruit.php';
echo "A $color $fruit"; // A green apple
?>
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
// 参照渡し
function add_some_extra(&$string) {
$string .= 'and something extra.';
}
// デフォルト
function makecoffee($type = "cappuccino") {
return "Making a cup of $type.\n";
}
// 型指定
function sum(int $a, int $b) {
return $a + $b;
}
class C {}; function f(C $c = null) {
var_dump($c);
}
// 無限の引数
function total_intervals($unit, DateInterval ...$intervals) {
$time = 0;
foreach ($intervals as $interval) {
$time += $interval->$unit;
}
return $time;
}
// 返り値の型指定
function sum($a, $b): float {
return $a + $b;
}
// Nullableな返り値
function get_item(): ?string {
if (isset($_GET['item'])) {
return $_GET['item'];
} else {
return null;
}
}
// 無名関数
$greet = function($name) {
printf("Hello %s\r\n", $name);
};
// 静的無名関数
class Foo {
function __construct() {
$func = static function() {
var_dump($this);
};
$func();
}
};
// アロー関数
$y = 1;
$fn1 = fn($x) => $x + $y;
$fn2 = function ($x) use ($y) {
return $x + $y;
};
fn(array $x) => $x;
static fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;