
推荐(免费):PHP7
1、 null合并运算符(??)
??语法: 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数.
1 2 3 4 5 6 7 8 9 10 | 1
if 判断
2 if ( empty ( $_GET [ 'param' ])) {
3 $param = 1;
4 } else {
5 $param = $_GET [ 'param' ];
6 } 7
8
9 $param = empty ( $_GET [ 'param' ]) ? 1 : $_GET [ 'param' ];10
11
|
登录后复制
2. define() 定义常量数组
1 2 3 4 5 6 7 8 9 10 11 12 | 1
2 define( "CONTENT" , "hello world" );
3 echo CONTENT;
5
7 'dog' ,
8 'cat' ,
9 'bird'
10 ]);
11 echo ANIMALS[2];
13
14 const CONSTANT = 'Hello World' ;
15 echo CONSTANT;
|
登录后复制
3. 组合比较符(<=>)
组合比较符用于比较两个表达式.当$a小于、等于或大于$b时它分别返回-1、0或1. 比较的原则是沿用PHP的常规比较规则进行的.
1 2 3 4 5 6 7 8 9 10 | 1
2 echo 1 <=> 1;
3 echo 1 <=> 2;
4 echo 2 <=> 1;
6
8 echo 1.5 <=> 2.5;
9 echo 2.5 <=> 1.5;
11
13 echo "a" <=> "b" ;
14 echo "b" <=> "a" ;
|
登录后复制
4. 变量类型声明
两种模式: 强制(默认)和严格模式. 可以使用下列类型参数: string,int,float,bool
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1
2 function intSum(int ... $ints ){
3 return array_sum ( $ints );
4 }
5 var_dump(intSum(2, '3.5' ));
6
7
8
9 declare (strict_types=1);
10 function add(int $a ,int $b ){
11 return $a + $b ;
12 }
13 var_dump(add(2, '3.5' ));
|
登录后复制
5. 返回值类型声明
增加返回类型声明的支持.类似于参数类型声明.(用法在函数定义的后面加 :类型名)
1 2 3 4 5 6 | 1
2 declare (strict_types = 1);
3 function getInt(int $value ): int {
4 return $value ;
5 }
6 print (getInt(6));
|
登录后复制
1 2 3 4 5 6 | 1
2 declare (strict_types = 1);
3 function getNoInt(int $value ): int {
4 return $value + '2.5' ;
5 }
6 print (getNoInt(6));
|
登录后复制
6. 匿名类
允许new class {} 创建一个匿名的对象.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 1 <?php
2
3 interface User{
4 public function getDiscount();
5 }
6 class VipUser implements User{
7
8 private $discount = 0.6;
9 public function getDiscount() {
10 return $this ->discount;
11 }
12 }
13 class Goods{
14 private $price = 200;
15 private $objectVipUser ;
16
17 public function getUserData( $User ){
18 $this ->objectVipUser = $User ;
19 $discount = $this ->objectVipUser->getDiscount();
20 echo "商品价格:" . $this ->price* $discount ;
21 }
22 }
23 $display = new Goods();
24
25 $display ->getUserData( new VipUser);
|
登录后复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 1 <?php
2
3 interface User{
4 public function getDiscount();
5 }
6 class Goods{
7 private $price = 200;
8 private $objectVipUser ;
9 public function getUserData( $User ){
10 $this ->objectVipUser = $User ;
11 $discount = $this ->objectVipUser->getDiscount();
12 echo "商品价格:" . $this ->price* $discount ;
13 }
14 }
15 $display = new Goods();
16
17 $display ->getUserData( new class implements User{
18 private $discount = 0.6;
19 public function getDiscount() {
20 return $this ->discount;
21 }
22 });
|
登录后复制
7. Closure::call()
Closure::call() 方法被添加为一个简短的方式来临时绑定一个对象作用域到一个闭包并调用它. 与PHP5的bindTo相比.它的性能要快得多.
1 2 3 4 5 6 7 8 9 10 11 12 | 1 <?php
2
3 class A {
4 private $attribute = 'hello world';
5 }
6
7 $getClosure = function (){
8 return $this ->attribute;
9 };
10
11 $getAttribute = $getClosure ->bindTo( new A, 'A' );
12 echo $getAttribute ();
|
登录后复制
1 2 3 4 5 6 7 8 9 10 11 | 1 <?php
2
3 class A {
4 private $attribute = 'hello world';
5 }
6
7 $getClosure = function (){
8 return $this ->attribute;
9 };
10
11 echo $getClosure ->call( new A);
|
登录后复制
8. unserialize()
unserialize()函数:过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1 <?php
2 class A{
3 public $name = 'admin_a';
4 }
5 class B{
6 public $name = 'admin_b';
7 }
8 9 $objA = new A();
10 $objB = new B();
11 12 $serializedObjA = serialize( $objA );
13 $serializedObjB = serialize( $objB );
14 15 16
18 var_dump( $dataA );
22 var_dump( $dataA );
26 var_dump( $dataB );
|
登录后复制
9. IntlChar
IntlChar:提供了一些可用于访问Unicode字符信息的实用方法的访问. 注意:必须安装Intl扩展才能使用!
1 2 3 4 5 | 1 var_dump(IntlChar::CODEPOINT_MAX);
2 echo '<br>' ;
3 var_dump(IntlChar::charName( '+' ));
4 echo '<br>' ;
5 var_dump(IntlChar::ispunct( '?' ));
|
登录后复制
10. CSPRNG
CSPRNG 函数提供一种简单的机制来生成密码的随机数.
random_bytes() -加密生存被保护的伪随机字符串.
random_int() -加密生存被保护的伪随机整数.
1 2 3 4 5 6 | 1 $bytes = random_bytes(8);
2 echo (bin2hex( $bytes ));
3 echo '<br>' ;
4 echo (random_int(1, 999));
5 echo '<br>' ;
6 print (random_int(-999, -1));
|
登录后复制
11. use 语句
可以使用单个use语句从相同的命名空间导入类,函数和常量,而不是使用多个use语句.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1
2 use some\ namespace \ClassA;
3 use some\ namespace \ClassB;
4 use some\ namespace \ClassC as C;
5 use function some\ namespace \fn_a;
6 use function some\ namespace \fn_b;
7 use function some\ namespace \fn_c;
8 use const some\ namespace \ConstA;
9 use const some\ namespace \ConstB;
10 use const some\ namespace \ConstC;
11
12
13 use some\ namespace \{ClassA, ClassB, ClassC as C};
14 use function some\ namespace \{fn_a, fn_b, fn_c};
15 use const some\ namespace \{ConstA, ConstB, ConstC};
|
登录后复制
12. intp
新增加intp()函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整.
1 2 3 | 1 echo intp(8,4);
2 echo intp(10,4);
3 echo intp(5,10);
|
登录后复制
13. PHP7 错误处理
1 | PHP7 改变了大多数错误的报告方式.不同于PHP5的传统错误报告机制,现在大多数错误被作为Error异常抛出.
|
登录后复制
1 2 | 这种Error异常可以像普通异常一样被 try / catch 块所捕获. 如果没有匹配的 try / catch 块,则调用异常处理函数(由 set_exception_handler() 注册)进行处理.
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error).
|
登录后复制
1 2 | Error类并不是从Exception类扩展出来的,所以用 catch (Exception $e ) { ... } 这样的代码是捕获不到Error的.你可以用 catch (Error $e ) { ... } 这样的代码,
或者通过注册异常处理函数( set_exception_handler())来捕获Error.
|
登录后复制

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 1 <?php
2
3 class getException extends Exception{
4 public function errorMsg(){
5 return '错误的信息'. $this ->getMessage(). '<br>错误的代码' . $this ->getCode();
6 }
7 }
8
9 try {
10 $num =10;
11 if ( $num > 1) {
12 throw new getException( $num ,404);
13 }
14 } catch (getException $e ) {
15 echo $e ->errorMsg();
16 }
|
登录后复制
1 2 3 4 5 6 7 | 1 <?php
2
3 try {
4 test();
5 } catch (Error $e ) {
6 echo $e ->getMessage();
7 }
|
登录后复制
以上是理解和比较php7新特性的详细内容。更多信息请关注PHP中文网其他相关文章!