php7 の新しいスカラー、演算子、および戻り値の型機能の詳細な説明
1. ?? 演算子 (NULL 結合演算子)
$a = $_GET['a'] ?? 1;
と同等です:
$a = empty($_GET['a']) ? 1 : $_GET['a'];
三項演算子演算子は次のように使用できることがわかっています:
$a ?: 1
ただし、これはすでに $a に基づいています。定められた前提の上で。新しい ?? 演算子により判断が簡略化されます。コードが簡素化され、同時により直感的になりました。
2. 関数の戻り値の型宣言
公式ドキュメントで提供されている例 (...
の辺の長さパラメーターの構文は PHP 5.6 以降でのみ使用できることに注意してください): ...
的边长参数语法在 PHP 5.6 以上的版本中才有):
<?php function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); } print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
从这个例子中可以看出现在函数(包括匿名函数)都可以指定返回值的类型。
这个特性可以帮助我们避免一些 PHP 的隐式类型转换带来的问题。在定义一个函数之前就想好预期的结果可以避免一些不必要的错误。
不过这里也有一个特点需要注意。PHP 7 增加了一个 declare 指令:strict_types
,既使用严格模式。
使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是预期的类型,PHP 还是会对其进行强制类型转换。但是如果是严格模式, 则会出发一个 TypeError
的 Fatal error。
强制模式:
<?php function foo($a) : int { return $a; } foo(1.0);
以上代码可以正常执行,foo 函数返回 int 1,没有任何错误。
严格模式:
<?php declare(strict_types=1); function foo($a) : int { return $a; } foo(1.0);
在声明之后,就会触发致命错误。
# PHP Fatal error: Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6
3. 标量类型声明
PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array
或者 callable
(PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string
、int
、float
和 bool
了。
<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
需要注意的是上文提到的严格模式的问题在这里同样适用:强制模式(默认,既强制类型转换)下还是会对不符合预期的参数进行强制类型转换,严格模式下则触发 TypeError
的致命错误。
4. use 批量声明
PHP 7 中 use 可以在一句话中声明多个类或函数或 const 了:
<?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 *
的方法)。
需要留意的问题是:如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。
再来简单说几个:
1、PHP 5.3 开始有了匿名函数,现在又有了匿名类了;
2、define 现在可以定义常量数组;
3、闭包( Closure)增加了一个 call 方法;
4、生成器(或者叫迭代器更合适)可以有一个最终返回值(return),也可以通过 yield from
的新语法进入一个另外一个生成器中(生成器委托)。
生成器的两个新特性(return 和 yield from
rrreee
strict_types
が追加されています。 🎜🎜戻り値の型宣言を使用する場合、厳密モードで宣言されていない場合、戻り値が期待される型でない場合でも、PHP はそれに対してキャスト型変換を実行します。ただし、厳密モードの場合、TypeError
の致命的エラーがトリガーされます。 🎜🎜強制モード: 🎜rrreee🎜 上記のコードは正常に実行でき、foo 関数はエラーなしで int 1 を返します。 🎜🎜厳密モード: 🎜rrreee🎜宣言後、致命的なエラーがトリガーされます。 🎜rrreee🎜3. スカラー型宣言🎜🎜 PHP 7 の関数の仮パラメータ型宣言はスカラーにすることができます。 PHP 5 では、クラス名、インターフェイス、array
、または callable
のみを指定できます (PHP 5.4 では、匿名関数を含む関数も指定できます)。 string
、int
、float
、および bool
を使用します。 🎜rrreee🎜上記の厳密モードの問題がここでも適用されることに注意してください。強制モード (デフォルトでは強制型変換) では、厳密モードの期待を満たさないパラメーターに対しても強制型変換が実行されます。場合、TypeError
の致命的エラーが発生します。 🎜🎜4. バッチ宣言を使用する🎜🎜 PHP 7 では、複数のクラス、関数、または const を 1 つの文で宣言できます: 🎜rrreee🎜 ただし、依然として各クラス、関数、または const の名前を書き出す必要があります (Python とは異なります)。一部の import * メソッドの と同じです)。 🎜🎜注意する必要がある質問は、composer と PSR-4 に基づくフレームワークを使用している場合、この記述方法でクラス ファイルを正常にロードできるかということです。実際、composer によって登録された<a href="http://www.php.cn/php/php-tp-upload.html" target="_blank">自動読み込みメソッドは、クラスがクラスの </a><a href="http://www.php.cn/wiki/220.html" target="_blank"> 名前空間 🎜 に従って場所を見つけます。この書き方は影響しません。 。 🎜🎜もう少し簡単に説明しましょう: 🎜🎜1. PHP 5.3 には匿名関数が追加されました。🎜🎜2. クロージャが追加されました。メソッド; 🎜🎜4. ジェネレーター (またはイテレーターのほうが適切です) は最終的な戻り値 (return) を持つことも、<code>yield from
(ジェネレーター デリゲート) の新しい構文を通じて別のジェネレーターに入ることができます。 🎜🎜ジェネレーターの 2 つの新しい機能 (return と yield from
) を組み合わせることができます。詳細については、ご自身でテストしてください。 🎜以上がphp7 の新しいスカラー、演算子、および戻り値の型機能の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。
