search
HomeBackend DevelopmentPHP7Let's talk about the understanding and comparison of new features of php7

Let's talk about the understanding and comparison of new features of php7

null coalescing operator (??)

?? Syntax: If the variable exists and the value is not NULL, it will return its own value, otherwise it will return it The 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

define() defines a constant array

//php7以前define("CONTENT", "hello world");echo CONTENT;//hello world//PHP7define('ANIMALS', [    'dog',    'cat',    'bird']);echo ANIMALS[2];//bird//PHP7 类外也可使用const来定义常量const CONSTANT = 'Hello World'; 
echo CONSTANT;//Hello World

Combined comparison operator ()

Combined comparison operator is used to compare two An expression. When a is less than, equal to or greater than b, it returns -1, 0 or 1 respectively. The principle of comparison is to follow the general comparison rules of PHP.

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

Variable type declaration

Two modes: mandatory (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,&#39;3.5&#39;));//5//严格模式//模式声明:declare(strict_types=1);  默认情况值为0,值为1代表为严格校验的模式 declare(strict_types=1);function add(int $a,int $b){    return $a+$b;
}
var_dump(add(2,&#39;3.5&#39;)); //Fatal error: Uncaught TypeError: Argument 2 passed to add() must be of the type integer

Return value type declaration

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

1 //有效的返回类型2 declare(strict_types = 1);3 function getInt(int $value): int {4   return $value;5 }6 print(getInt(6));//6
1 //无效返回类型2 declare(strict_types = 1);3 function getNoInt(int $value): int {4   return $value+&#39;2.5&#39;;5 }6 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer

Anonymous class

Allows new class {} to create an 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 $User){        $this->objectVipUser = $User;
        $discount = $this->objectVipUser->getDiscount();        echo "商品价格:".$this->price*$discount;
    }
}
$display = new Goods();//常规实例化接口实现对象$display->getUserData(new VipUser);//商品价格:120
<?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

Closure::call()

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

<?php//php7以前class A {    private  $attribute = &#39;hello world&#39;;
}

$getClosure = function(){    return $this->attribute;
};

$getAttribute = $getClosure->bindTo(new A, &#39;A&#39;);//中间层闭包echo $getAttribute();//hello world
<?php//PHP7class A {    private  $attribute = &#39;hello world&#39;;
}

$getClosure = function(){    return $this->attribute;
};echo $getClosure->call(new A);//hello world

unserialize()

unserialize() function: filtering feature can prevent illegal data from being injected into the code, providing safer deserialization 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" }

IntlChar

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

1 var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) 2 echo &#39;<br>&#39;;3 var_dump(IntlChar::charName(&#39;+&#39;));//string(9) "PLUS SIGN" 4 echo &#39;<br>&#39;;5 var_dump(IntlChar::ispunct(&#39;?&#39;));//bool(true)

CSPRNG

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

random_bytes() - Cryptographically protected pseudo-random string.

random_int() - Cryptographically protected pseudo-random integers.

1 $bytes = random_bytes(8); 
2 echo(bin2hex($bytes));//随机2073a110a2e3c4973 echo &#39;<br>&#39;;4 echo(random_int(1, 999));//随机7865 echo &#39;<br>&#39;;6 print(random_int(-999, -1));//随机-357

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};

intp

The newly added intp() function receives two parameters and the return value is the value of the first parameter divided by the second parameter and rounded.

1 echo intp(8,4);//22 echo intp(10,4);//23 echo intp(5,10);//0

PHP7 Error Handling

PHP7 has changed the way most errors are reported. Unlike the traditional error reporting mechanism of PHP5, most errors are now thrown as Error exceptions.
This An Error exception can be caught by a try/catch block like a normal exception. If there is no matching try/catch block, the exception handling function (registered by set_exception_handler()) is called for processing.
If the exception handling function has not been registered, It is handled in the traditional way: it is reported as a fatal error (Fatal Error).
The Error class is not extended from the Exception class, so code such as catch (Exception $e) { ... } cannot be caught. to Error. You can use code like catch (Error $e) { ... },
or catch Error by registering an exception handling function (set_exception_handler()).

Let's talk about the understanding and comparison of new features of php7

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

Recommended tutorial: "PHP Tutorial"

The above is the detailed content of Let's talk about the understanding and comparison of new features of php7. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:liqingbo. If there is any infringement, please contact admin@php.cn delete

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function