前提
- PHPをかじり始めたのは随分と昔だったのですが、気がつけばPHPも最近は書きやすくなっていました
- 最近のPHPらしい書き方を調べたので今後のコーディングのベースにするために備忘録を残したいと思います
- PHP7前提の話です。古いバージョンのPHPでは使えない場合があります
- まとめの粒度や順番は主観によるものです。省略している部分もあります
バグの少ないキレイなコーディングをするために...
名前空間(PHP5.3から)
// ネームスペースを付けることでクラス名などの競合を避けることができる
namespace App¥Hoge
遅延静的束縛(PHP5.3から)
// クラス名::hoge は呼び方によらず、そのクラスを参照
// self::hoge はメソッドの書かれたクラスを参照
// static::hoge メソッドを呼んだクラスを参照
// static::hoge によるメソッド参照は、そのメソッドを含むクラスを更に継承した時に変化が生じる
無名関数・クロージャ(PHP5.3から)
// $hoge に無名関数を代入
$hoge = function ( $name ) {
printf('これは %s', $name);
};
// 代入した関数が実行される。
$hoge('りんご');
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
配列(PHP5.4から)
// 昔
$hoge = array();
$hoge = array(1,2,3);
// 今
$hoge = [];
$hoge = [1, 2, 3];
引数の可変長(PHP5.6から)
function sum(...$number)
{
$hoge = 0;
foreach($number as $val){
$hoge += $val;
}
return $hoge;
}
// 10が返ってくる
$ten = sum(1, 2, 3, 4, 5);
型宣言(PHPのバージョンごとに順次できることが増加中)
- PHPのタイプヒンティングはデフォルトでは厳格ではありません
- int / bool / float / string / array / クラスなどの一部の型しか使えません
- 厳格な型指定を行うためには、ファイル内に「decleare(strict_types=1)」と指定する必要があります
- NULLを許容する場合は型の前に?を記入します(PHP7.1)
- 返り値がないことを明示したい場合は戻り値宣言にvoidを付けます(PHP7.1)
// 昔
型宣言しなくてもOK(だから不具合がよく起こった
// 今(タイプヒンティングができるようになった)
function(int $hoge, array $day): int
{
return $hoge;
}
NULLチェック
// $appleがNULLでなければ$apple。$appleがNULLであれば$orange。
$name = $apple ?? $orange;
参考
- [PHP]PHP7.0での変更点とアップグレード時の対応
- PHP7.0がでたので、いまどきの「普通」のPHPの話