PHP7 特性学习

类型的声明

declare(strict_types=1); //严格模式
function add(int $a, int $b): int {
    return $a+$b;
}

echo add(1, 2);
echo add(1.5, 2.6);

// 可以使用 (int) 或者 intval() 来强制把一个类型转成 int 类型
var_dump(22/3); // float(7.3333333333333)
var_dump((int)(22/3)); // int(7)
var_dump(intval(22/3)); // int(7)
var_dump(round(22/3, 2)); // float(7.33) round函数的第二个参数为保留小数点几位

返回值类型受限制的

下面代码声明返回值为int

declare(strict_types=1); 
function sum(int ...$ints):int
{
    return array_sum($ints);
}
var_dump(sum(1,2,3)); //6

php7.1对函数返回值类型做了扩充,可定义返回值类型为void,无论是否开启严格模式,==只要函数有"return;" 以外的其它return语句都会报错==

declare(strict_types=1); 
function sum(int ...$ints):void
{
    // return NULL; //报错
    return ; //后面有 "return;"之外的语句也报错 
    // return array_sum($ints);
}
var_dump(sum(1,2,3));

php7.1对参数类型和返回值类型还有进一步的支持,其类型可以使空类型,在参数或者返回值类型声明前加上"?"表示要么是null,要么是声明的类型

declare(strict_types=1); 
function test(?int $a):?int
{
    return $a;
}
var_dump(test(null)); //NULL 
var_dump(test(1));  //int(1)
var_dump(test('a'));  // Fatal error

新增操作符:<=> 比大小

运算符: ??

$a = $_GET['a'] ?? 1;

//它相当于:
$a = isset($_GET['a']) ? $_GET['a'] : 1;

Unicode字符格式支持(\u{xxxxx})

// 打印unicode
echo "\u{1F602}"; 
echo "\u{0000aa}";
echo "\u{9999}";

命名空间引用

    use Common\admin\ClassA;
    use Common\admin\ClassB;
    use Common\admin\ClassC;
    use Common\admin\ClassD as Dd;
    // PHP7新语法写法
    use Common\admin\{ ClassA, ClassB, ClassC, ClassD as Dd };

匿名函数

$anonymous_func = function(){return 'function';};
echo $anonymous_func(); // 输出function

list修改

`不再按照相反的顺序赋值` ```php //$arr将会是[1,2,3]而不是之前的[3,2,1] list($arr[], $arr[], $arr[]) = [1,2,3]; ```

null合并操作符

$page=isset($_GET['p'])?$_GET['p']:0;
//php7
$page =$_GET['p'] ??0;

//三元运算符
$page =$_GET['p'] ?? $_POST['p'] ??0;
/** 重要 **/
var_dump((bool) false);     // bool(false)
var_dump((bool) 0);         // bool(false)
var_dump((bool) 0.00);      // bool(false)
var_dump((bool) "");        // bool(false)
var_dump((bool) "0");       // bool(false)
var_dump((bool) array());   // bool(false)
var_dump((bool) []);        // bool(false)
var_dump((bool) null);      // bool(false)
var_dump((bool) "00");      // bool(true)
var_dump((bool) "0.0");     // bool(true)
var_dump((bool) -1);        // bool(true)
var_dump((bool) 1);         // bool(true)
var_dump((bool) "abc");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) [12]);      // bool(true)
var_dump((bool) NAN);       // bool(true)

把字符串当成数组处理

第一位是0,第二位是1……

// 把字符串当成数组处理,第一位是0,第二位是1……
$str5 = 'xyzefg';
echo $str5[0], "\n"; // x
// echo $str5[6], "\n"; // 最大是5,6已经越界。PHP Notice:  Uninitialized string offset:

intdiv() 函数

接收两个参数,返回值为第一个参数除于第二个参数的值并取整。


如何充分发挥PHP7的性能




导航