検索

php7の新機能の比較と理解

Oct 14, 2019 pm 12:01 PM
php7新機能

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 つの式を比較するために使用されます。b の場合、それぞれ -1、0、または 1 が返されます。比較の原則は、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,&#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

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+&#39;2.5&#39;;
}
print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer

6. 匿名クラス

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

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

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, &#39;A&#39;);//中间层闭包
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 &#39;<br>&#39;;
var_dump(IntlChar::charName(&#39;+&#39;));//string(9) "PLUS SIGN" 
echo &#39;<br>&#39;;
var_dump(IntlChar::ispunct(&#39;?&#39;));//bool(true)

10. CSPRNG

CSPRNG 関数は、パスワードの乱数を生成する簡単なメカニズムを提供します。

random_bytes() - A暗号的に保護された擬似乱数文字列.

random_int() - 暗号的に保護された擬似乱数整数.

$bytes = random_bytes(8); 
echo(bin2hex($bytes));//随机2073a110a2e3c497
echo &#39;<br>&#39;;
echo(random_int(1, 999));//随机786
echo &#39;<br>&#39;;
print(random_int(-999, -1));//随机-357

11. use ステートメント

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

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

12. intdiv

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

#
echo intdiv(8,4);//2
echo intdiv(10,4);//2
echo intdiv(5,10);//0

13. PHP7 エラー処理

PHP7ほとんどのエラーが報告される方法が変更されました。PHP5 の従来のエラー報告メカニズムとは異なり、ほとんどのエラーはエラー例外としてスローされるようになりました。

このエラー例外は、try/catch ブロックでキャッチされた通常の例外のように扱うことができます。一致する try/catch ブロックがない場合、例外処理関数 (set_Exception_handler() によって登録される) が処理のために呼び出されます。

例外処理関数が登録されていない場合は、従来の方法で処理されます。

Error クラスは Exception クラスから拡張されていないため、 catch (Exception $e) { ... } のようなコードでは Error をキャッチできません。 catch (Error $e) { ... } または、例外処理関数 (set_Exception_handler()) を登録してエラーをキャッチします。

<?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();
}
<?php  
//php7 异常处理
try {
    test();
}catch(\Exception $e){
    echo $e->getMessage();//自定义异常抛出
}catch(\Error $e) {  //系统错误
    echo $e->getMessage();//Call to undefined function test()
}
php7の新機能の比較と理解PHP 関連の知識の詳細については、次のサイトを参照してください。

PHP中国語ウェブサイト

!

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

声明
この記事は简书で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
酸とベースデータベース:違いとそれぞれを使用するタイミング。酸とベースデータベース:違いとそれぞれを使用するタイミング。Mar 26, 2025 pm 04:19 PM

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

PHP入力検証:ベストプラクティス。PHP入力検証:ベストプラクティス。Mar 26, 2025 pm 04:17 PM

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

PHP APIレート制限:実装戦略。PHP APIレート制限:実装戦略。Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

PHPパスワードハッシュ:password_hashおよびpassword_verify。PHPパスワードハッシュ:password_hashおよびpassword_verify。Mar 26, 2025 pm 04:15 PM

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP XSS予防:XSSから保護する方法。PHP XSS予防:XSSから保護する方法。Mar 26, 2025 pm 04:12 PM

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

PHPインターフェイスvs抽象クラス:それぞれを使用する時期。PHPインターフェイスvs抽象クラス:それぞれを使用する時期。Mar 26, 2025 pm 04:11 PM

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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