この記事では主に PHP 7.0 で新しく追加された機能を紹介します。必要な方は参考にしてください
?? 演算子 (NULL マージ演算子) 非常に便利だと思うので最初に置きました。使用法: $a = $_GET['a'] ?? 1; これは次と同等です:
?? 演算子 (NULL 合体演算子)
便利だと思うので最初に入れておきます。使用法:
$a = $_GET['a'] ?? 1;
次と同等です: $a = $_GET['a'] ?? 1;
它相当于:
<?php $a = isset($_GET['a']) ? $_GET['a'] : 1;
我们知道三元运算符是可以这样用的:
$a ?: 1 但是这是建立在 $a 已经定义了的前提上。新增的 ?? 运算符可以简化判断。
1.函数返回值类型声明
官方文档提供的例子(注意 ... 的边长参数语法在 PHP 5.6 以上的版本中才有):
这种声明的写法有些类似于 Swift:
func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting } 这个特性可以帮助我们避免一些 PHP 的隐式类型转换带来的问题。在定义一个函数之前就想好预期的结果可以避免一些不必要的错误。</p>
<p>不过这里也有一个特点需要注意。PHP 7 增加了一个 declare 指令:strict_types,既使用严格模式。</p>
<p>使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是预期的类型,PHP 还是会对其进行强制类型转换。但是如果是严格模式, 则会出发一个 TypeError 的 Fatal error。</p>
<p><strong>强制模式:</strong></p>
<p><code><?php function foo($a) : int { return $a; } foo(1.0);
<?php $a = isset($_GET['a' ] ) ? $_GET['a'] : 1;
三項演算子は次のように使用できることがわかっています: $a ?: 1 ただし、これは $a が定義されていることを前提としています。新しい ?? 演算子により判断が簡略化されます。
1. 関数の戻り値の型宣言公式ドキュメントで提供される例 (注意...辺の長さのパラメータ構文は PHP 5.6 以降でのみ使用可能です):
このステートメントの記述方法は Swift に似ています: funcsayHello(personName:String) ->String { letgreeting = "Hello, " + personName + "!"
この機能は、PHP の暗黙的な型変換によって引き起こされるいくつかの問題を回避するのに役立ちます。関数を定義する前に期待される結果について考えると、不要な間違いを避けることができます。 しかし、ここで注意が必要な機能もあります。 PHP 7 では、strict モードを使用する宣言ディレクティブである strict_types が追加されています。
強制モード:
<?php function foo($a) : int { return $a; } foo(1.0); 上記のコードは正常に実行できます。関数はエラーなしで int 1 を返します。 <p class="jb51code"></p>
<p>厳密モード: </p>
<p></p>
<p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php declare(strict_types=1); function foo($a) : int { return $a; } foo(1.0);</pre><div class="contentsignin">ログイン後にコピー</div></div><span style="color: #ff0000"><strong></strong>PHP 致命的エラー: キャッチされません TypeError: foo() の戻り値は、test.php:6 で返される整数型、浮動小数点型である必要があります</span><br/>宣言後、致命的なエラーが発生します。 </p><p>js の strict モードに似ていますか? </p><p class="jb51code"></p><p>スカラー型宣言</p><p></p><p><span style="color: #ff0000"> PHP 7 の関数の仮パラメータ型宣言をスカラーにできるようになりました。 PHP 5 では、クラス名、インターフェイス、配列、または呼び出し可能なもののみにすることができます (PHP 5.4 では、匿名関数を含む関数にすることもできます)。文字列、int、float、bool も使用できるようになりました。 <strong></strong></span>公式の例: <br/></p><p></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, &#39;3&#39;, 4.1));</pre><div class="contentsignin">ログイン後にコピー</div></div><p><span style="color: #ff0000"><strong> 上記の厳密モードの問題がここにも当てはまることに注意してください: 強制モード (デフォルト、強制型変換) では、変換されない問題が依然として存在します。パラメータは強制的に型変換され、重大な TypeError エラーが厳密モードでトリガーされます。 </strong></span></p><p>1.バッチ宣言を使用する</p>🎜🎜🎜🎜 PHP 7 では、複数のクラス、関数、または const を 1 つの文で宣言できます: 🎜🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php 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}; 但还是要写出每个类或函数或 const 的名称(并没有像 Python 一样的 from some import * 的方法)。</pre><div class="contentsignin">ログイン後にコピー</div></div>🎜🎜🎜 注意する必要がある問題は次のとおりです。使用 Composer と PSR-4 をベースにしたフレームワークですが、この書き方でクラスファイルを正常に読み込むことができますか?実際、composer によって登録されたオートロード メソッドは、クラスが呼び出されたときにクラスの名前空間に従って場所を検索します。この書き方は影響しません。 🎜🎜🎜🎜その他の機能🎜🎜🎜🎜🎜その他の機能については一つずつ紹介しませんので、興味があれば公式ドキュメントを確認してください: http://php.net/manual/en/migration70.new -features.php 🎜🎜🎜🎜 いくつかについて簡単に説明します。 🎜🎜🎜🎜 PHP 5.3 は匿名関数で始まり、現在では、define に定数配列を定義できるようになりました。 iterator の方が適切です)、最終的な戻り値 (return) を持つことも、yield from の新しい構文を通じて別のジェネレーター (ジェネレーター デリゲート) を入力することもできます。 ジェネレーターの 2 つの新しい機能 (return と yield from) を組み合わせることができます。特定の外観を自分でテストできます。 PHP 7 は現在 RC5 であり、最終バージョンは間もなく公開される予定です。 🎜</p>
以上がPHP 7.0 の新機能の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。