PHP

今のPHPらしい書き方をするためには

前提

  • PHPをかじり始めたのは随分と昔だったのですが、気がつけばPHPも最近は書きやすくなっていました
  • 最近のPHPらしい書き方を調べたので今後のコーディングのベースにするために備忘録を残したいと思います
  • PHP7前提の話です。古いバージョンのPHPでは使えない場合があります
  • まとめの粒度や順番は主観によるものです。省略している部分もあります

バグの少ないキレイなコーディングをするために...

名前空間(PHP5.3から)

http://php.net/manual/ja/language.namespaces.rationale.php

// ネームスペースを付けることでクラス名などの競合を避けることができる
namespace App¥Hoge

遅延静的束縛(PHP5.3から)

http://php.net/manual/ja/language.oop5.late-static-bindings.php

// クラス名::hoge は呼び方によらず、そのクラスを参照
// self::hoge はメソッドの書かれたクラスを参照
// static::hoge メソッドを呼んだクラスを参照
// static::hoge によるメソッド参照は、そのメソッドを含むクラスを更に継承した時に変化が生じる

無名関数・クロージャ(PHP5.3から)

http://php.net/manual/ja/functions.anonymous.php

// $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;

参考