整理几点php7的新特性

写于 2017-12-07 | 分类于 编程

当初在学校自学php编程的时候还是php5.4,也好久没用php写项目了,现在用起来已经是php7.2的新版本了。今天花点时间理理php7很好用的几点新特性

Null 合并操作符

// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

组合比较符

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

匿名类

// interface Logger;
// class Application;
$app = new Application;
$app->setLogger(new class implements Logger {
    public function log(string $msg) {
        echo $msg;
    }
});

通过 define() 定义常量数组

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; 
// 输出 "cat"

参数类型声明和返回值类型声明

// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));
// 示例输出int(9)

Closure::call()闭包调用

class A {private $x = 1;}

// Pre PHP 7 代码
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
echo $getX();

// PHP 7+ 代码
$getX = function() {return $this->x;};
echo $getX->call(new A);

Generator 生成器可以返回表达式

$gen = (function() {
    yield 1;
    yield 2;

    return 3;
})();

foreach ($gen as $val) {
    echo $val, PHP_EOL;
}

echo $gen->getReturn(), PHP_EOL;

整除函数 intdiv()

var_dump(intdiv(10, 3));
// 输出int(3)

参考资料