PHP7で追加した新特性

PHP

php7で追加した新特性を紹介します。

宇宙船演算子

宇宙船演算子は、二つの式を比較するために使うものです。 $a が $b より大きい場合は 1、 $a と $b が等しい場合は 0、 $a が $b より小さい場合は -1 をそれぞれ返します。 

<?php
// 整数値
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// 浮動小数点数値
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 文字列
echo “a” <=> “a”; // 0
echo “a” <=> “b”; // -1
echo “b” <=> “a”; // 1
?>

Null 合体演算子

null 合体演算子 (??) がシンタックスシュガーとして追加されました。 三項演算子と isset() を組み合わせる よくありがちなパターンを、より簡単に書くためのものです。 この演算子は、もし第一オペランドが非 null の値であればそれを返し、 そうでない場合は第二オペランドを返します。

<?php
// $_GET[‘user’] を取得します。もし存在しない場合は
// ‘nobody’ を用います。
$username = $_GET[‘user’] ?? ‘nobody’;
// 上のコードは、次のコードと同じ意味です。
$username = isset($_GET[‘user’]) ? $_GET[‘user’] : ‘nobody’;

// 合体演算子を連結することもできます。次のように書くと、
// $_GET[‘user’]、$_POST[‘user’] そして ‘nobody’
// の順に調べて、非 &null; が定義されている最初の値を返します。
$username = $_GET[‘user’] ?? $_POST[‘user’] ?? ‘nobody’;
?>

戻り値の型宣言

PHP 7 では、 戻り値の型宣言 もできるようになりました。 引数の型宣言 と同様に、戻り値の型宣言では、関数が戻す値がどの型になるかを宣言します。 戻り値の型宣言で使える  は、引数の型宣言で使えるものと同じです。

<?php

function arraysSum(array …$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

define() を用いた配列定数の定義

define() で配列の定数を定義できるようになりました。 PHP 5.6 までのバージョンでは、配列の定数は const でしか定義できませんでした。

<?php
define(‘ANIMALS’, [
    ‘dog’,
    ‘cat’,
    ‘bird’
]);

echo ANIMALS[1]; // “cat” と出力します
?>

Closure::call()

Closure::call() は、オブジェクトのスコープをクロージャに一時的に束縛して実行するための、 より高性能で簡潔な方法です。

<?php
class A {private $x = 1;}

// 以前のバージョンのコード
$getX = function() {return $this->x;};
$getXCB = $getX->bindTo(new A, ‘A’); // 中間クロージャが必要
echo $getXCB();

// PHP 7 以降でのコード
$getX = function() {return $this->x;};
echo $getX->call(new A);

intdiv() による整数の除算

新しい intdiv() 関数は、 オペランドに対して整数の除算を行い、その結果を返します。

<?php
var_dump(intdiv(10, 3));
?>
タイトルとURLをコピーしました