検索
ホームページバックエンド開発PHP7php7 の新機能の理解と比較

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

?? 構文: 変数が存在する場合値は NULL ではなく、独自の値を返します。そうでない場合は、2 番目のオペランドを返します。


//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() は定数配列を定義します


 //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. 結合された比較演算子 ()

#結合比較演算子は、2 つの式を比較するために使用されます。$a が $ より小さい、等しい、または $ より大きい場合、それぞれ -1、0、または 1 を返します。 b. 比較の原則は、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

4. 変数の型宣言

2 つのモード: 強制モード (デフォルト) と厳密モード。次の型パラメータを使用できます: 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

5. 戻り値の型宣言

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


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


//无效返回类型
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

6. 匿名クラス

新規許可class {} を使用して匿名オブジェクトを作成します。


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


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

7. Closure::call()

Closure::call() メソッドは、オブジェクト スコープをクロージャに一時的にバインドして呼び出すための短い方法として追加されました。そのパフォーマンスは、PHP5 の bindingTo と比較してはるかに高速です。 .

#

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

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


8. unserialize()

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

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


9. IntlChar

IntlChar: Unicode 文字情報へのアクセスに使用できるいくつかのユーティリティ メソッドへのアクセスを提供します。 注: Intl 拡張子は

#

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)

10. CSPRNG

CSPRNG 関数は、簡単な機能を提供します。暗号化乱数を生成するメカニズム。

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

random_int() - 暗号化で保護された擬似-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

11. use ステートメント

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

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

.


##

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

13. PHP7 エラー処理

echo intp(8,4);//2
echo intp(10,4);//2
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.

  <?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();
    }

関連する推奨事項: 「PHP」チュートリアル###"###

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

声明
この記事はcnblogsで複製されています。侵害がある場合は、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ヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。