首页  >  文章  >  后端开发  >  详解php7新特性

详解php7新特性

零到壹度
零到壹度原创
2018-03-24 09:56:112264浏览

这次给大家总结php7新特性,下面就是实战案例,一起跟随小编的脚步来看一下。


php7新特性

标量类型声明(要求参数是一个具体的类型,如果参数类型不匹配,php5 会出现fatal 错误,php7 会抛 TypeError 异常)

有两种模式:强制(默认)和严格模式. 

类型参数有:

            1. string

            2. int

           3. float

            4.bool

它们扩充了php5中引入的其他类型

             1.类名

            2. 接口

            3.数组

            4.回调类型

例如:

<span style="font-size:18px;">function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, &#39;3&#39;, 4.1));</span>

输出:
int(9)

返回类型声明

php7 增加了对返回类型的支持,其和参数类型声明非常相似,返回类型
声明指明了函数返回值的类型。可用的类型与参数声明中的可用类型相同。

例如:

<span style="font-size:18px;"><?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]));
以上例程会输出:
Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)</span>


NULL合并运算符

如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个参数

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;

上下两个表达式 的结果是一样的。

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;


组合比较符

用于比较两个表达式。当$a 大于、等于或小于$b 时它分别返回1、0或-1.

例如:

<span style="font-size:18px;"><?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?></span>

通过define() 定义常量数组

<?php
define(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);
echo ANIMALS[1]; // outputs "cat"
?>
php5.6 中 仅能通过const 定义
<?php
const $a = [
     &#39;a&#39;,&#39;b&#39;,&#39;c&#39;,
];
echo $a[1] ; //输出 “b”
?>

匿名类              

现在可以通过支持new class 来实例化一个匿名类 , 这个可以用来代替一些只用一次的完成类

为unserialize()提供过滤

<span style="font-size:18px;"><?php
// 把所有的对象转换为 __PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);
// 除了MyClass,MyClass2 都转换为 into __PHP_Incomplete_Class object 
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);
// 默认的行为,接受所有的参数
$data = unserialize($foo, ["allowed_classes" => true]);
</span>

IntlChar

新增加的IntlChar 类 旨在暴露出更多的ICU功能,这个类自身定义了许多静态方法用于操作多字符集的unicode字符

如果要使用此类,需要先安装Intl扩展

预期

预期是向后兼用并增强之前的assert()的方法,它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特性异常的能力。
现在assert() 是一个语言结构,它允许第一个参数是一个表达式 而不仅仅是一个待计算的字符串或一个待测试的boolean

使用use 声明一组 类 

如下:

<span style="font-size:18px;"><?php
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
?>
</span>


生成器 return 表达式

如下:

<span style="font-size:18px;"><?php
$gen = (function() {
    yield 1;
    yield 2;
    return 3;
})();
foreach ($gen as $val) {
    echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;// 换行,为了提高源码可读性
以上例程会输出:
1
2
3
</span>

生成器可以委托另一个生成器

如下:

<span style="font-size:18px;"><?php
function gen()
{
    yield 1;
    yield 2;
    yield from gen2();
}
function gen2()
{
    yield 3;
    yield 4;
}
foreach (gen() as $val)
{
    echo $val, PHP_EOL;
}
?>
以上例程会输出:
1
2
3
4
</span>


新增了 整形相除函数 intp()
如下:

<span style="font-size:18px;"><?php
var_dump(intp(10, 3));
?>
以上例程会输出:
int(3)
</span>

Session options

现在可以通过session_start() 接受一个数组参数,可以从写session 在 php.ini里的配置指令
参数支持session.lazy_write ,read_and_close,cache_limiter 等等
如下:

<span style="font-size:18px;"><?php
session_start([
    &#39;cache_limiter&#39; => &#39;private&#39;,
    &#39;read_and_close&#39; => true,
]);
?>
</span>

新增 preg_replace_callback_array() 函数

可以是比preg_replace_callback() 执行的更好 

新增 random_bytes() 和 random_int()两个函数

具体使用方法 请查看如下:

random_bytes()
random_int()

list() 不在支持自动解包          

之前 list 对于操作实现了ArrayAccess的对象不提供保障,现在这个问题已经被解决了

以上是详解php7新特性的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn