Heim >Backend-Entwicklung >PHP7 >Lassen Sie uns über das Verständnis und den Vergleich neuer Funktionen von PHP7 sprechen
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 gib es zurück 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
define() definiert ein konstantes 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
Kombinationsvergleichsoperator (96b4fef55684b9312718d5de63fb7121)
Kombinationsvergleichsoperator wird zum Vergleichen verwendet zwei Ein Ausdruck. Wenn a kleiner, gleich oder größer als b ist, gibt er jeweils -1, 0 oder 1 zurück. Das Prinzip des Vergleichs besteht darin, den allgemeinen Vergleichsregeln von PHP zu folgen.
//整数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
Variablentypdeklaration
Zwei Modi: obligatorischer (Standard) und strikter Modus. Die folgenden Typparameter können verwendet werden: 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
Rückgabewerttypdeklaration
Unterstützung für die Rückgabetypdeklaration hinzufügen. Ähnlich wie bei der Parametertypdeklaration. (Zur Verwendung hinzufügen: Typname nach der Funktionsdefinition)
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+'2.5';5 }6 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
Anonyme Klasse
Ermöglicht das Erstellen einer neuen Klasse {} ein anonymes Objekt.
<?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()
Die Methode Closure::call() wurde als kurze Möglichkeit hinzugefügt, einen Objektbereich vorübergehend an einen Abschluss zu binden und ihn aufzurufen. Im Vergleich zu bindTo von PHP5 ist die Leistung viel schneller.
<?php//php7以前class A { private $attribute = 'hello world'; } $getClosure = function(){ return $this->attribute; }; $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包echo $getAttribute();//hello world
<?php//PHP7class A { private $attribute = 'hello world'; } $getClosure = function(){ return $this->attribute; };echo $getClosure->call(new A);//hello world
unserialize()
unserialize()-Funktion: Die Filterfunktion kann die Codeinjektion illegaler Daten verhindern und eine sicherere Deserialisierung von Daten ermöglichen
<?php class A{ public $name = 'admin_a'; } class B{ public $name = 'admin_b'; } $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: Bietet Zugriff auf einige Dienstprogrammmethoden, die für den Zugriff auf Unicode-Zeicheninformationen verwendet werden können. HINWEIS: Zur Verwendung muss die Intl-Erweiterung installiert sein!
1 var_dump(IntlChar::CODEPOINT_MAX);//int(1114111) 2 echo '<br>';3 var_dump(IntlChar::charName('+'));//string(9) "PLUS SIGN" 4 echo '<br>';5 var_dump(IntlChar::ispunct('?'));//bool(true)
CSPRNG
Die CSPRNG-Funktion bietet einen einfachen Mechanismus zum Generieren kryptografischer Zufallszahlen.
random_bytes() – kryptografisch geschützte pseudozufällige Zeichenfolge.
random_int() – kryptografisch geschützte pseudozufällige Ganzzahlen.
1 $bytes = random_bytes(8); 2 echo(bin2hex($bytes));//随机2073a110a2e3c4973 echo '<br>';4 echo(random_int(1, 999));//随机7865 echo '<br>';6 print(random_int(-999, -1));//随机-357
use-Anweisung
Eine einzelne use-Anweisung kann zum Importieren von Klassen, Funktionen und Konstanten aus demselben Namespace verwendet werden, anstatt mehrere use-Anweisungen zu verwenden.
//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
Die Funktion intp() wurde neu hinzugefügt und empfängt zwei Parameter. Der Rückgabewert ist der Wert des ersten Parameters dividiert durch den zweiten Parameter und gerundet.
1 echo intp(8,4);//22 echo intp(10,4);//23 echo intp(5,10);//0
PHP7-Fehler Behandlung
PHP7 hat die Art und Weise geändert, wie die meisten Fehler gemeldet werden. Im Gegensatz zum herkömmlichen Fehlermeldemechanismus von PHP5 werden die meisten Fehler jetzt als Fehlerausnahmen ausgelöst.
Diese Ausnahme kann von einem Fehler abgefangen werden Try/Catch-Block wie eine normale Ausnahme. Wenn kein passender Try/Catch-Block vorhanden ist, wird die Ausnahmebehandlungsfunktion (registriert durch set_Exception_handler()) zur Verarbeitung aufgerufen.
Wenn die Ausnahmebehandlungsfunktion nicht registriert wurde, ist dies der Fall Wird auf herkömmliche Weise behandelt: Es wird als schwerwiegender Fehler (Fatal Error) gemeldet.
Die Error-Klasse wird nicht von der Exception-Klasse erweitert, sodass Code wie Catch (Exception $e) { ... } nicht abgefangen werden kann . bis Error. Sie können Code wie Catch (Error $e) { ... },
oder Catch Error verwenden, indem Sie eine Ausnahmebehandlungsfunktion (set_Exception_handler()) registrieren.
<?php//php7以前 自定义异常处理class getException extends Exception{ public function errorMsg(){ return '错误的信息'.$this->getMessage().'<br>错误的代码'.$this->getCode(); } }try { $num =10; if($num > 1) { throw new getException($num,404); } } catch (getException $e) { echo $e->errorMsg(); }rrree
Empfohlenes Tutorial: „PHP-Tutorial“
Das obige ist der detaillierte Inhalt vonLassen Sie uns über das Verständnis und den Vergleich neuer Funktionen von PHP7 sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!