ホームページ バックエンド開発 PHP7 php7 の新機能を理解して比較する

php7 の新機能を理解して比較する

Jan 29, 2021 am 09:35 AM

php7 の新機能を理解して比較する

# 推奨 (無料): PHP7

1. null 合体演算子 (??)

??構文: 変数が存在し、値が NULL でない場合は、その変数自体の値が返され、それ以外の場合は 2 番目のオペランドが返されます。

 1 //php7以前  
 if判断 
 2 if(empty($_GET['param'])) { 
 3       $param = 1; 
 4 }else{ 
 5     $param = $_GET['param']; 
 6 } 7  
 8 //php7以前  三元运算符 
 9 $param = empty($_GET['param']) ? 1 : $_GET['param'];10 
 11 //PHP7  null合并运算符12 $param = $_GET['param'] ?? 1;//1
ログイン後にコピー

2.define() は定数配列を定義します##

 1 //php7以前 
 2 define("CONTENT", "hello world"); 
 3 echo CONTENT;//hello world 4  
 5 //PHP7 6 define('ANIMALS', [ 
 7     'dog', 
 8     'cat', 
 9     'bird'
 10 ]);
 11 echo ANIMALS[2];//bird12 
 13 //PHP7 类外也可使用const来定义常量
 14 const CONSTANT = 'Hello World'; 
15 echo CONSTANT;//Hello World
ログイン後にコピー

#3.結合された比較演算子 (< => )##結合比較演算子は 2 つの式を比較するために使用されます。$a が $b より小さい、等しい、または $b より大きい場合にそれぞれ返されます。 . -1、0、または 1. 比較原理は、PHP の一般的な比較規則に基づいています。

#

 1 //整数 
 2 echo 1 <=> 1; // 0 
 3 echo 1 <=> 2; // -1 
 4 echo 2 <=> 1; // 1 5  
 6 //浮点数 7 echo 1.5 <=> 1.5; // 0 
 8 echo 1.5 <=> 2.5; // -1 
 9 echo 2.5 <=> 1.5; // 1 
 11 //字符串12 echo "a" <=> "a"; // 0
 13 echo "a" <=> "b"; // -1
 14 echo "b" <=> "a"; // 1
ログイン後にコピー
4. 変数の型宣言

2 つのモード: 強制モード (デフォルト) と厳密モード。次の型パラメータを使用できます: string、int、float、bool

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

5. 戻り値の型宣言

パラメータの型宣言と同様に、戻り値の型宣言のサポートを追加します (使用方法として、関数定義の後に型名を追加します)

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
ログイン後にコピー

#6. 匿名クラス

新しいクラス {} が匿名オブジェクトを作成できるようにします。

 1 <?php 
 2 //php7以前 接口实现 
 3 interface User{ 
 4     public function getDiscount(); 
 5 } 
 6 class VipUser implements User{ 
 7     //折扣系数 
 8     private $discount = 0.6; 
 9     public function getDiscount() {
 10         return $this->discount;
 11     }
 12 }
 13 class Goods{
 14     private $price = 200;
 15     private $objectVipUser;
 16     //User接口VipUser类实现
 17     public function getUserData($User){
 18         $this->objectVipUser = $User;
 19         $discount = $this->objectVipUser->getDiscount();
 20         echo "商品价格:".$this->price*$discount;
 21     }
 22 }
 23 $display = new Goods();
 24 //常规实例化接口实现对象
 25 $display ->getUserData(new VipUser);//商品价格:120
ログイン後にコピー
 1 <?php 
 2 //php7 创建一个匿名的对象 
 3 interface User{ 
 4     public function getDiscount(); 
 5 } 
 6 class Goods{ 
 7     private $price = 200; 
 8 private $objectVipUser; 
 9     public function getUserData($User){
 10         $this->objectVipUser = $User;
 11         $discount = $this->objectVipUser->getDiscount();
 12         echo "商品价格:".$this->price*$discount;
 13     }
 14 }
 15 $display = new Goods();
 16 //new匿名对象实现user接口
 17 $display ->getUserData(new class implements User{
 18     private $discount = 0.6;
 19     public function getDiscount() {
 20         return $this->discount;
 21     }
 22 });//商品价格:120
ログイン後にコピー

7. Closure::call()

Closure::call() メソッドは、一時的にScope のオブジェクトをクロージャにバインドして呼び出します。PHP5 の bindingTo と比較して、そのパフォーマンスははるかに高速です。

 1 <?php 
 2 //php7以前 
 3 class A { 
 4     private  $attribute = &#39;hello world&#39;; 
 5 } 
 6  
 7 $getClosure = function(){ 
 8     return $this->attribute; 
 9 };
 10 
 11 $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包
 12 echo $getAttribute();//hello world
ログイン後にコピー
 1 <?php 
 2 //PHP7 
 3 class A { 
 4     private  $attribute = &#39;hello world&#39;; 
 5 } 
 6  
 7 $getClosure = function(){ 
 8     return $this->attribute; 
 9 };
 10 
 11 echo $getClosure->call(new A);//hello world
ログイン後にコピー

8.unserialize()

unserialize() 関数: フィルタリング機能により、不正なデータのコード インジェクションを防止し、より安全な逆シリアル化データを提供できます

 1 <?php 
 2 class A{  
 3    public $name = &#39;admin_a&#39;;    
 4 } 
 5 class B{ 
 6    public $name = &#39;admin_b&#39;; 
 7 } 
 8  9 $objA = new A(); 
10 $objB = new B(); 
11 12 $serializedObjA = serialize($objA); 
13 $serializedObjB = serialize($objB); 
14 15 16 //默认行为是接收所有类; 第二个参数可以忽略17 $dataA = unserialize($serializedObjA , ["allowed_classes" => true]); 
18 var_dump($dataA);//object(A)#3 (1) { ["name"]=> string(7) "admin_a" }19 20 //如果allowed_classes设置为false,unserialize会将所有对象转换为__PHP_Incomplete_Class对象 21 $dataA = unserialize($serializedObjA , ["allowed_classes" => false]); 
22 var_dump($dataA);//object(__PHP_Incomplete_Class)#4 (2) { ["__PHP_Incomplete_Class_Name"]=> string(1) "A" ["name"]=> string(7) "admin_a" }23 24 //转换所有对象到 __PHP_Incomplete_Class对象,除了对象"B"25 $dataB = unserialize($serializedObjB , ["allowed_classes" => ["B"]]); 
26 var_dump($dataB);//object(B)#3 (1) { ["name"]=> string(7) "admin_b" }
ログイン後にコピー
9. IntlChar

#IntlChar: Unicode 文字情報にアクセスするためのユーティリティ メソッドへのアクセスを提供します。使用するには、Intl 拡張機能をインストールする必要があります!

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)
ログイン後にコピー
10. CSPRNG

CSPRNG 関数は、暗号化乱数を生成する単純なメカニズム。

random_bytes() - 暗号化で保護された擬似乱数文字列。

random_int() - 暗号化で保護された擬似-random integer.

1 $bytes = random_bytes(8); 
2 echo(bin2hex($bytes));//随机2073a110a2e3c497
3 echo '<br>';
4 echo(random_int(1, 999));//随机786
5 echo '<br>';
6 print(random_int(-999, -1));//随机-357
ログイン後にコピー

11. use ステートメント

単一の use ステートメントを使用してクラスをインポートできます。複数の use ステートメントを使用する代わりに、同じ名前空間の関数と定数を使用します。

 1 //PHP7之前 
 2 use some\namespace\ClassA; 
 3 use some\namespace\ClassB; 
 4 use some\namespace\ClassC as C; 
 5 use function some\namespace\fn_a; 
 6 use function some\namespace\fn_b; 
 7 use function some\namespace\fn_c; 
 8 use const some\namespace\ConstA; 
 9 use const some\namespace\ConstB;
 10 use const some\namespace\ConstC;
 11 
 12 // PHP7之后
 13 use some\namespace\{ClassA, ClassB, ClassC as C};
 14 use function some\namespace\{fn_a, fn_b, fn_c};
 15 use const some\namespace\{ConstA, ConstB, ConstC};
ログイン後にコピー

12.intp

新たに追加された intp() 関数は 2 つのパラメータを受け取り、戻り値は最初のパラメータの値を 2 番目のパラメータで割って四捨五入した値になります。 13. PHP7 エラー処理

1 echo intp(8,4);//2
2 echo intp(10,4);//2
3 echo intp(5,10);//0
ログイン後にコピー
PHP7 改变了大多数错误的报告方式.不同于PHP5的传统错误报告机制,现在大多数错误被作为Error异常抛出.
ログイン後にコピー
这种Error异常可以像普通异常一样被try / catch块所捕获. 如果没有匹配的try / catch块,则调用异常处理函数(由 set_exception_handler() 注册)进行处理.
如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error).
ログイン後にコピー

Error类并不是从Exception类扩展出来的,所以用catch (Exception $e) { ... } 这样的代码是捕获不到Error的.你可以用 catch (Error $e) { ... } 这样的代码,
或者通过注册异常处理函数( set_exception_handler())来捕获Error.
ログイン後にコピー
 1 <?php 
 2 //php7以前 自定义异常处理 
 3 class getException extends Exception{ 
 4     public function errorMsg(){ 
 5         return &#39;错误的信息&#39;.$this->getMessage().'<br>错误的代码'.$this->getCode(); 
 6     } 
 7 } 
 8  
 9 try {
 10     $num =10;
 11     if($num > 1) {
 12         throw new getException($num,404);
 13     }
 14 } catch (getException $e) {
 15     echo $e->errorMsg();
 16 }
ログイン後にコピー

以上がphp7 の新機能を理解して比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 7でセッションを効果的に使用する方法は? PHP 7でセッションを効果的に使用する方法は? Mar 10, 2025 pm 06:20 PM

この記事では、session_start()、$ _session、session_destroy()、セキュアクッキー処理などのコア機能をカバーする効果的なPHP 7セッション管理について詳しく説明します。 HTTPS、セッションID再生、sなどのセキュリティベストプラクティスを強調しています

New RelicなどのツールでPHP 7のパフォーマンスを監視する方法は? New RelicなどのツールでPHP 7のパフォーマンスを監視する方法は? Mar 10, 2025 pm 06:28 PM

この記事では、New Relicを使用してPHP 7アプリケーションのパフォーマンスを監視する方法について説明します。 New Relicのセットアップ、APDEXスコアや応答時間などのキーパフォーマンスインジケーター(KPI)、トランザクショントレースを介したボトルネックの識別、エラートラックの詳細

PHP 5.6からPHP 7にアップグレードする方法は? PHP 5.6からPHP 7にアップグレードする方法は? Mar 10, 2025 pm 06:29 PM

この記事では、PHP 5.6をPHP 7にアップグレードし、バックアップ、サーバーの互換性のチェック、アップグレードメソッドの選択などの重要な手順(パッケージマネージャー、コンパイル、コントロールパネル、またはWebサーバーの構成)を強調しています。 ポテンティアに対処します

PHP 7でクラスを自動装備する方法は? PHP 7でクラスを自動装備する方法は? Mar 10, 2025 pm 06:20 PM

この記事では、SPL_AUTOLOAD_REGISTER()を使用してクラスをオンデマンドでロードするPHP 7のオートローディングについて説明します。 それは、名前空間ベースのオートローディングやパフォーマンスの最適化のためのキャッシュなどのベストプラクティスを詳述し、一般的な問題に対処します(例:クラスは見つかりません

PHP 7プロジェクトでバージョンコントロールにGitを使用する方法は? PHP 7プロジェクトでバージョンコントロールにGitを使用する方法は? Mar 10, 2025 pm 06:27 PM

この記事は、バージョンコントロールにGitを使用することについてPHP 7開発者をガイドします。 初期化、ステージング、コミット、ファイルの無視、リモートリポジトリ、分岐、マージ、競合解決、および重要なGITコマンドをカバーします。 効率のためのベストプラクティス

PHP 7アプリケーションをWebサーバーに展開する方法は? PHP 7アプリケーションをWebサーバーに展開する方法は? Mar 10, 2025 pm 06:28 PM

この記事では、PHP 7アプリケーションの展開、メソッド(FTP、SSH、展開ツール)、サーバー構成(APACHE/NGINX、PHP-FPM)、データベースのセットアップ、および重要なセキュリティに関する考慮事項をカバーする詳細を詳述しています。 Server Compatibなどの一般的な課題を強調しています

PHP 7コードのデバッグにXdebugを使用する方法は? PHP 7コードのデバッグにXdebugを使用する方法は? Mar 10, 2025 pm 06:26 PM

この記事では、PHP 7コードのデバッグにXdebugを使用する方法について説明します。 Xdebug構成(インストール、PHP.ini設定、IDEセットアップ)、ブレークポイント使用(条件、関数、リモート)、およびトラブルシューティング接続の問題をカバーします。 効果的なデビッジ

PHP 7にファイルを含めて要求する方法は? PHP 7にファイルを含めて要求する方法は? Mar 10, 2025 pm 02:52 PM

この記事では、PHP 7のinclude、include_once、require、require_onceファイルインクルージョンメソッドについて説明します。 エラー処理(警告対致命的なエラー)と複数の包含防止の違いを詳述しています。 ファイル組織のベストプラクティス

See all articles