Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich und Verständnis der neuen Funktionen von PHP7

Vergleich und Verständnis der neuen Funktionen von PHP7

angryTom
angryTomnach vorne
2019-10-14 12:01:462053Durchsuche

1.null-Koaleszenzoperator (??)

?? Syntax: Wenn die Variable existiert und der Wert nicht NULL ist, gibt sie ihren eigenen Wert zurück, andernfalls wird sie zurückgegeben Es ist der zweite 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

2. define() definiert das konstante 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

3. Kombinierte Vergleichsoperatoren (96b4fef55684b9312718d5de63fb7121)

Der kombinierte Vergleichsoperator wird verwendet, um zwei Ausdrücke zu vergleichen. Wenn b, gibt er jeweils -1, 0 oder 1 zurück. Das Prinzip des Vergleichs besteht darin, den regulären Vergleichsregeln von PHP zu folgen.

rrree

4. Variablentypdeklaration

Zwei Modi: obligatorischer (Standard) und strikter Modus. Die folgenden Typparameter können verwendet werden: string, int, float, bool

//整数
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

5. Rückgabewert-Typdeklaration

Fügen Sie Unterstützung für die Rückgabetyp-Deklaration hinzu (fügen Sie zur Verwendung hinzu: Typnamen nach der Funktionsdefinition).

//... 操作符: 表示这是一个可变参数. 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
rreee

6. Anonyme Klasse

Ermöglicht der neuen Klasse {}, ein anonymes Objekt zu erstellen.

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

7. Abschluss::call ()

Die Methode Closure::call() wurde als kurze Möglichkeit hinzugefügt, einen Objektbereich vorübergehend an einen Abschluss zu binden und ihn aufzurufen. Ihre Leistung ist im Vergleich zu bindTo von PHP5 viel höher.

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

8. unserialize()

Die Funktion unserialize(): Die Filterfunktion kann die Codeinjektion illegaler Daten verhindern und sorgt für eine sicherere Reaktion auf serialisierte Daten

<?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

9. IntlChar

IntlChar: Bietet Zugriff auf einige praktische Methoden, die für den Zugriff auf Unicode-Zeicheninformationen verwendet werden können. Hinweis: Zur Verwendung muss die Intl-Erweiterung installiert sein

<?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

10. CSPRNG

Die CSPRNG-Funktion bietet einen einfachen Mechanismus zum Generieren von Zufallszahlen für Passwörter.

random_bytes() -Kryptografisch geschütztes Pseudo- Zufallszeichenfolge.

Random_int() -Kryptografisch geschützte pseudozufällige Ganzzahl.

<?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

11. Use-Anweisung

Sie können eine einzelne Use-Anweisung verwenden um Klassen, Funktionen und Konstanten aus demselben Namespace zu importieren, anstatt mehrere Use-Anweisungen zu verwenden.

12. Die neu hinzugefügte intdiv()-Funktion erhält zwei Parameter , und der Rückgabewert ist der Wert des ersten Parameters dividiert durch den zweiten Parameter und gerundet.

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

PHP7 hat die Art und Weise am meisten verändert Im Gegensatz zum herkömmlichen Fehlerberichtsmechanismus von PHP5 werden die meisten Fehler jetzt als Fehlerausnahmen ausgelöst. Diese Fehlerausnahme kann wie eine normale Ausnahme behandelt werden, die von einem Try/Catch-Block abgefangen wird /catch-Block, die Ausnahmebehandlungsfunktion (registriert durch set_Exception_handler()) wird zur Verarbeitung aufgerufen

Wenn die Ausnahmebehandlungsfunktion nicht registriert wurde, wird sie auf herkömmliche Weise behandelt: Als schwerwiegender Fehler gemeldet (. Schwerwiegender Fehler).

Die Error-Klasse wird nicht von der Exception-Klasse erweitert, daher kann Code wie „catch“ (Exception $e) { ... } „Error“ nicht abfangen. Sie können Code wie „catch“ (Error $e) verwenden. { ... },

oder durch Registrieren einer Ausnahmehandlerfunktion (set_Exception_handler()), um Fehler abzufangen.

<?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" }
rrree

Für weitere PHP-bezogene Kenntnisse, Bitte besuchen Sie die

PHP-Chinese-Website

!

Das obige ist der detaillierte Inhalt vonVergleich und Verständnis der neuen Funktionen von PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen