LoginSignup
28
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-19

前提

  • 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;

参考

28
22
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
22