php新特性

标量类型声明

两种方式:强制方式和严格方式
int float bool string array interface callable 7种类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null

//强制模式 会将参数强制转换为对应的参数类型
declare(strict_types=1);
function getSum(?int ...$int){
    return array_sum($int);
}
$sum = getSum(1,2,3,4.9);
print($sum);

//严格模式 如果不符合参数类型则报错
declare(strict_types=1);
function getSum(int ...$int){
    return array_sum($int);
}
$sum = getSum(1,2,3,4);
print($sum);
函数返回值类型

int float bool string array interface callable 7种类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null
一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值

//强制模式 会将参数强制转换为对应的参数类型
function getSum(int $init):?int
{
    return $init + 1.1;
}
$sum = getSum(1);
print($sum);

//严格模式 如果不符合参数类型则报错
declare(strict_types=1);
function getSum(int $init):?int
{
    return $init + 1.1;
}
$sum = getSum(1);
print($sum);

function swap(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}
空合并运算符

$a ?? $b ?? $c 从左往右第一个存在且不为 NULL 的操作数

$post = $_POST;
// 之前的写法 $id = isset($post['id']) ? $post['id'] : 0;
$id = $post['id'] ?? 0;
print($id);
太空船运算符

$a <=> b 当 b 当 ba小于、等于、大于$b时 分别返回一个小于、等于、大于0的integer 值

$a = 1 <=> 2;
$b = 4 <=> 3;
$c = 5 <=> 5;
var_dump($a,$b,$c);
常量数组

在 PHP 5 中,define 的 value 必须是标量( integer、 float、string、boolean、NULL)在 PHP 7 中还允许是个 array 的值

define('TMP_NAME',['Tom','Lily','Ben']);
if(defined('TMP_NAME'))
    var_dump(TMP_NAME);
匿名类

在php7中,匿名类现在可以使用 new class 来定义。匿名类可以使用来代替完整的类定义

interface Logger {
    public function log(string $msg);
}

class Application {
    private $logger;

    public function getLogger(): Logger {
        return $this->logger;
    }

    public function setLogger(Logger $logger) {
        $this->logger = $logger;
    }
}

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

$app->getLogger()->log("My first Log Message");
use 语句

从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了

// PHP 7 之前的代码
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

// PHP 7+ 及更高版本的代码
use some\namespace\{ClassA, ClassB, ClassC as C};
新增整数除法函数
$a = 10;
$b = 3;
//$c = $a / $b;
$c = intdiv($a,$b);
var_dump($c);
CSPRNG Functions

新加入两个跨平台的函数: random_bytes() 和 random_int() 用来产生高安全级别的随机字符串和随机整数

$bytes = bin2hex(random_bytes(5));
$int   = random_int(100,999);
var_dump($bytes,$int);
短数组语法

短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)

$data = [
    [1, 'Tom',29],
    [2, 'Fred',35],
];

// list() style
list($id1, $name1,$age) = $data[0];
var_dump($id1,$name1,$age);
echo '
'
; // [] style [$id1, $name1] = $data[0]; var_dump($id1,$name1); echo '
'
; // list() style foreach ($data as list($id, $name)) { // logic here with $id and $name var_dump($id,$name); } echo '
'
; // [] style foreach ($data as [$id, ,$age]) { // logic here with $id and $name var_dump($id,$age); }
类常量的可见性

与类属性的可见性一致

class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
还有一些其他的特性,具体的可参考官方文档

你可能感兴趣的:(php从入门到放弃)