当前位置:首页 > PHP文摘 > 列表

PHP7.4新特性汇总

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-29 08:06:19 浏览: 评论:0 

PHP7.4 新特性

PHP7.4已经发布了。又带来了一些新特性。可以让我们的代码写的更少了。

1.属性添加限定类型

  1. <?php 
  2.  
  3. class User { 
  4.  
  5.   public int $age
  6.  
  7.   public string $name 
  8.  
  9. }   
  10.  
  11. $user = new User(); 
  12.  
  13. $user->age = 10; 
  14.  
  15. $user->name = "张三"
  16.  
  17. //error 
  18.  
  19. $user->age = "zhang";//需要传递int 

2. 箭头函数

这个特性基本上参考 Js 的 ES6 的语法,可以让我们的代码写的更少,如果你的代码有 fn 这个函数,可能会冲突

  1. <?php 
  2.  
  3. $factor = 10; 
  4.  
  5. $nums = array_map(fn($n)=>$n * $factor,[1,2,3]);//[10,20,30] 
  6.  
  7. //之前的写法 
  8.  
  9. $nums = array_map(function($num)use($factor){ 
  10.  
  11.   return $num * $factor
  12.  
  13. },[1,2,3]) 

3. 有限返回类型协变与参数类型逆变

仅当使用自动加载时,才提供完全协变 / 逆变支持,在单个文件中,只能使用非循环类型引用,因为所有类在被引用之前都必须可用。

  1. <?php 
  2.  
  3. class A {} 
  4.  
  5. class B extends A {} 
  6.  
  7. class Producer { 
  8.  
  9.     public function method(): A {} 
  10.  
  11.  
  12. class ChildProducer extends Producer { 
  13.  
  14.     public function method(): B {} 
  15.  
  16.  
  17. ?> 

4. 数组解包

使用展开运算符... 解包数组,这个特性,应该又是从 js 那吸收过来的,看例子:

  1. <?php 
  2.  
  3. $parts = ['apple''pear']; 
  4.  
  5. $fruits = ['banana''orange', ...$parts'watermelon'];//['banana', 'orange', 'apple', 'pear', 'watermelon']; 
  6.  
  7. //老的写法 
  8.  
  9. $fruits = array_merge(['banana''orange'],$parts,['watermelon']); 

5. 空合并运算符赋值

  1. <?php 
  2.  
  3. $array['key'] ??= computeDefault(); 
  4.  
  5. // 老的写法 
  6.  
  7. if (!isset($array['key'])) { 
  8.  
  9.     $array['key'] = computeDefault(); 
  10.  
  11.  
  12. ?> 

6. 数值文字分隔符

数字文字可以在数字之间包含下划线。

  1. <?php 
  2.  
  3. 6.674_083e-11; // float 
  4.  
  5. 299_792_458;   // decimal 
  6.  
  7. 0xCAFE_F00D;   // hexadecimal 
  8.  
  9. 0b0101_1111;   // binary 
  10.  
  11. ?> 

7. 允许从 __toString () 抛出异常

现在允许从 __toString() 引发异常,以往这会导致致命错误,字符串转换中现有的可恢复致命错误已转换为 Error 异常。

8. Filter

新增 FILTER_VALIDATE_FLOAT

  1. <?php 
  2.  
  3.   filter_var(1.00,FILTER_VALIDATE_FLOAT); 
  4.  
  5. filter.filters.validate 

9. strip_tags 支持数组

  1. <?php 
  2.  
  3.   strip_tags($str,['p','a','div']); 
  4.  
  5. //老的写法 
  6.  
  7. strip_tags($str,"<p><a><div>"); 

废弃的特性

1. 没有显式括号的嵌套三元运算符

  1. <?php 
  2.  
  3. 1 ? 2 : 3 ? 4 : 5;   // deprecated 
  4.  
  5. (1 ? 2 : 3) ? 4 : 5; // ok 
  6.  
  7. 1 ? 2 : (3 ? 4 : 5); // ok 
  8.  
  9. ?> 

面试的时候,终于不用担心问你这个结果是啥了,其实生产中,大家也不会这么写。

2. 花括号访问数组索引

  1. <?php 
  2.  
  3. $arr = ["a"=>"111"]; 
  4.  
  5. $index = "a"
  6.  
  7. $arr{$index}//废弃 
  8.  
  9. $arr[$index]; 

说实话,还是第一次见到,废弃了,说明大家不会这么用。

3. real 和 is_real 实数

  1. <?php 
  2.  
  3.   $num = ""
  4.  
  5.   $a = (real) $num;//废弃 
  6.  
  7.   $a = (float) $num

4. parent 关键词在没父类的类中使用

在没有父类的类中使用 parent 会出现编译错误。

  1. <?php 
  2.  
  3.   class Test{ 
  4.  
  5.   public function index()  
  6.  
  7.   { 
  8.  
  9.     return parent::index();//编译错误 
  10.  
  11.   } 
  12.  

5. money_format 函数

money_format 被废弃,使用 numberFormater 替换

6. 移除的拓展

1.Firebird/Interbase

2.Recode

3.WDDX

Tags: PHP7.4新特性汇总

分享到: