Home > Backend Development > PHP7 > body text

Understanding and comparing new features of php7

藏色散人
Release: 2023-02-17 11:34:02
forward
2526 people have browsed it

1. null coalescing operator (??)

?? Syntax: If the variable exists And the value is not NULL, it will return its own value, otherwise it will return its second operand.


//php7以前  if判断 
if(empty($_GET['param'])) { 
     $param = 1; 
}else{ 
    $param = $_GET['param']; 
} 
  
//php7以前  三元运算符 
$param = empty($_GET['param']) ? 1 : $_GET['param'];

//PHP7  null合并运算符
 
 $param = $_GET['param'] ?? 1;//1
Copy after login

2. define() defines a constant array


 //php7以前 
 define("CONTENT", "hello world"); 
  echo CONTENT;//hello world 
  
 //PHP7 
 define('ANIMALS', [ 
    'dog', 
     'cat', 
    'bird'
]);
 echo ANIMALS[2];//bird

 //PHP7 类外也可使用const来定义常量
 const CONSTANT = 'Hello World'; 
 echo CONSTANT;//Hello World
Copy after login

3. Combined comparison operators (<=>)

The combined comparison operator is used to compare two expressions. It returns -1, 0 or 1 respectively when $a is less than, equal to or greater than $b. The principle of comparison is to follow the general comparison rules of PHP.


 /整数 
echo 1 <=> 1; // 0 
echo 1 <=> 2; // -1 
echo 2 <=> 1; // 1 
 
 //浮点数 
echo 1.5 <=> 1.5; // 0 
echo 1.5 <=> 2.5; // -1 
echo 2.5 <=> 1.5; // 1
  
  //字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
Copy after login

4. Variable type declaration

Two modes: forced (default) and strict mode. The following type parameters can be used: string, int, float, bool


  //... 操作符: 表示这是一个可变参数. php5.6及以上的版本可使用: 函数定义的时候变量前使用. 
  function intSum(int ...$ints){ 
     return array_sum($ints); 
  } 
 var_dump(intSum(2,'3.5'));//5 
   
  //严格模式 
  //模式声明:declare(strict_types=1);  默认情况值为0,值为1代表为严格校验的模式  
  declare(strict_types=1);
  function add(int $a,int $b){
      return $a+$b;
  }
  var_dump(add(2,'3.5')); //Fatal error: Uncaught TypeError: Argument 2 passed to add() must be of the type integer
Copy after login

5. Return value type declaration

Add support for return type declaration. Similar to parameter type declaration. (For usage, add: type name after the function definition)


 //有效的返回类型
declare(strict_types = 1);
 function getInt(int $value): int {
   return $value;
 }
 print(getInt(6));//6
Copy after login


//无效返回类型
declare(strict_types = 1);
 function getNoInt(int $value): int {
   return $value+'2.5';
 }
 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
Copy after login

6. Anonymous class

Allows new class {} to create a Anonymous object.


  <?php 
  //php7以前 接口实现 
  interface User{ 
      public function getDiscount(); 
  } 
  class VipUser implements User{ 
      //折扣系数 
      private $discount = 0.6; 
      public function getDiscount() {
          return $this->discount;
      }
  }
  class Goods{
      private $price = 200;
      private $objectVipUser;
      //User接口VipUser类实现
      public function getUserData($User){
          $this->objectVipUser = $User;
          $discount = $this->objectVipUser->getDiscount();
          echo "商品价格:".$this->price*$discount;
      }
  }
  $display = new Goods();
  //常规实例化接口实现对象
  $display ->getUserData(new VipUser);//商品价格:120
Copy after login


  <?php 
  //php7 创建一个匿名的对象 
  interface User{ 
      public function getDiscount(); 
  } 
  class Goods{ 
      private $price = 200; 
      private $objectVipUser; 
      public function getUserData($User){
          $this->objectVipUser = $User;
          $discount = $this->objectVipUser->getDiscount();
          echo "商品价格:".$this->price*$discount;
      }
  }
  $display = new Goods();
  //new匿名对象实现user接口
  $display ->getUserData(new class implements User{
      private $discount = 0.6;
      public function getDiscount() {
          return $this->discount;
      }
  });//商品价格:120
Copy after login

7. Closure::call()

The Closure::call() method was added as a short way to temporarily bind an object scope to a closure and call it. Its performance is much faster compared to PHP5's bindTo. .


  <?php 
  //php7以前 
  class A { 
      private  $attribute = &#39;hello world&#39;; 
  } 
   
  $getClosure = function(){ 
      return $this->attribute; 
  };
  
  $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包
  echo $getAttribute();//hello world
Copy after login


  <?php 
  //PHP7 
  class A { 
      private  $attribute = &#39;hello world&#39;; 
  } 
   
  $getClosure = function(){ 
      return $this->attribute; 
  };
  
  echo $getClosure->call(new A);//hello world
Copy after login

8. unserialize()

unserialize() function: The filtering feature can prevent code injection of illegal data and provide safer deserialized data


  <?php 
  class A{  
     public $name = &#39;admin_a&#39;;    
  } 
  class B{ 
     public $name = &#39;admin_b&#39;; 
  } 
  $objA = new A(); 
 $objB = new B(); 
 $serializedObjA = serialize($objA); 
 $serializedObjB = serialize($objB); 
 //默认行为是接收所有类; 第二个参数可以忽略
 $dataA = unserialize($serializedObjA , ["allowed_classes" => true]); 
 var_dump($dataA);//object(A)#3 (1) { ["name"]=> string(7) "admin_a" }
//如果allowed_classes设置为false,unserialize会将所有对象转换为__PHP_Incomplete_Class对象 
 $dataA = unserialize($serializedObjA , ["allowed_classes" => false]); 
 var_dump($dataA);//object(__PHP_Incomplete_Class)#4 (2) { ["__PHP_Incomplete_Class_Name"]=> string(1) "A" ["name"]=> string(7) "admin_a" }
//转换所有对象到 __PHP_Incomplete_Class对象,除了对象"B"
 $dataB = unserialize($serializedObjB , ["allowed_classes" => ["B"]]); 
var_dump($dataB);//object(B)#3 (1) { ["name"]=> string(7) "admin_b" }
Copy after login

9. IntlChar

IntlChar: Provides access to some utility methods that can be used to access Unicode character information . Note: Intl extension must be installed to use!


var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) 
echo '<br>';
var_dump(IntlChar::charName('+'));//string(9) "PLUS SIGN" 
echo '<br>';
var_dump(IntlChar::ispunct('?'));//bool(true)
Copy after login

10. CSPRNG

The CSPRNG function provides a simple mechanism to generate cryptographic random numbers.

random_bytes() - Cryptographically protected pseudo-random string.

random_int() - A cryptographically protected pseudo-random integer.


$bytes = random_bytes(8); 
echo(bin2hex($bytes));//随机2073a110a2e3c497
echo '<br>';
echo(random_int(1, 999));//随机786
echo '<br>';
print(random_int(-999, -1));//随机-357
Copy after login

11. use statement

You can use a single use statement to import classes, functions and constants from the same namespace instead of using multiple use statements.


 //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};
Copy after login

12. intp

Newly added intp() function, receiving two parameters, the return value is the value of the first parameter divided by the second parameter and rounded.


##

echo intp(8,4);//2
echo intp(10,4);//2
echo intp(5,10);//0
Copy after login

13. PHP7 error handling


PHP7 改变了大多数错误的报告方式.不同于PHP5的传统错误报告机制,现在大多数错误被作为Error异常抛出.
Copy after login


这种Error异常可以像普通异常一样被try / catch块所捕获. 如果没有匹配的try / catch块,则调用异常处理函数(由 set_exception_handler() 注册)进行处理.
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error).
Copy after login


Error类并不是从Exception类扩展出来的,所以用catch (Exception $e) { ... } 这样的代码是捕获不到Error的.你可以用 catch (Error $e) { ... } 这样的代码,
或者通过注册异常处理函数( set_exception_handler())来捕获Error.
Copy after login


  <?php 
  //php7以前 自定义异常处理 
  class getException extends Exception{ 
      public function errorMsg(){ 
          return &#39;错误的信息&#39;.$this->getMessage().'<br>错误的代码'.$this->getCode(); 
      } 
  } 
   
  try {
      $num =10;
      if($num > 1) {
          throw new getException($num,404);
      }
  } catch (getException $e) {
      echo $e->errorMsg();
    }
Copy after login


 <?php  
 //php7 异常处理
 try {
     test();
 }catch(Error $e) {
     echo $e->getMessage();//Call to undefined function test()
      }
Copy after login
Related recommendations: "

PHP Tutorial"

The above is the detailed content of Understanding and comparing new features of php7. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template