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()

  }