php7新特性的理解和比较总结(3)
10. CSPRNG
CSPRNG 函数提供一种简单的机制来生成密码的随机数.
random_bytes() -加密生存被保护的伪随机字符串.
random_int() -加密生存被保护的伪随机整数.
$bytes = random_bytes(8); echo(bin2hex($bytes));//随机2073a110a2e3c497 echo '<br>'; echo(random_int(1, 999));//随机786 echo '<br>'; print(random_int(-999, -1));//随机-357
11. use 语句
可以使用单个use语句从相同的命名空间导入类,函数和常量,而不是使用多个use语句.
//PHP7之前 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; // PHP7之后 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};
12. intp
新增加intp()函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整.
echo intp(8,4);//2 echo intp(10,4);//2 echo intp(5,10);//0
13. PHP7 错误处理
PHP7 改变了大多数错误的报告方式.不同于PHP5的传统错误报告机制,现在大多数错误被作为Error异常抛出.
这种Error异常可以像普通异常一样被try / catch块所捕获. 如果没有匹配的try / catch块,则调用异常处理函数(由 set_exception_handler() 注册)进行处理.
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error).
Error类并不是从Exception类扩展出来的,所以用catch (Exception $e) { ... } 这样的代码是捕获不到Error的.你可以用 catch (Error $e) { ... } 这样的代码,
或者通过注册异常处理函数( set_exception_handler())来捕获Error.
<?php //php7以前 自定义异常处理 class getException extends Exception{ public function errorMsg(){ return '错误的信息'.$this->getMessage().'<br>错误的代码'.$this->getCode(); } } try { $num =10; if($num > 1) { throw new getException($num,404); } } catch (getException $e) { echo $e->errorMsg(); }
<?php //php7 异常处理 try { test(); }catch(Error $e) { echo $e->getMessage();//Call to undefined function test() }