1. PHP 5.5.x から PHP 5.6 に移行します。xx
式を使用して定数を定義する
PHP の以前のバージョンでは、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の指定には静的な値を使用する必要がありました。数値、文字列リテラル、その他の定数を含む数値式を使用して、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の設定を行うことができるようになりました。
<?php const ONE = 1; const TWO = ONE * 2; class C { const THREE = TWO + 1; const ONE_THIRD = ONE / self::THREE; const SENTENCE = 'The value of THREE is '.self::THREE; }
これで、 const
キーワードを使用して、 array
型の定数を定義できるようになりました。
<?php const ARR = ['a', 'b']; echo ARR[0];
可変長パラメータ関数を定義するには ...
演算子を使用します
現在、func_get_args()# に依存することはできません。 ##、可変長パラメーター関数を実装するには、
... 演算子を使用します。
<?php function f($req, $opt = null, ...$params) { // $params 是一个包含了剩余参数的数组 printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); ?>上記のルーチンは次の出力を行います:
$req: 1; $opt: 0; number of params: 0 $req: 1; $opt: 2; number of params: 0 $req: 1; $opt: 2; number of params: 1 $req: 1; $opt: 2; number of params: 2
関数を呼び出すときは ... 演算子をパラメータ拡張に使用します
... 演算子を使用する場合、配列と走査可能なオブジェクトを関数パラメータに展開します。 Ruby などの他のプログラミング言語では、これは連結演算子と呼ばれます。
<?php function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); ?>上記のルーチンは次のように出力します:
6
use function と use const
use function および
use const です。
<?php namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); } ?>上記のルーチンは出力します:
42 Name\Space\fUse
hash_equals() タイミング攻撃を避けるために文字列を比較します
2. PHP 5.6 より.x PHP 7.0 に移植。x
スカラー型宣言スカラー型宣言には、必須モード (デフォルト) と厳密モードの 2 つのモードがあります。 string、int、float、bool の型パラメータが (強制モードまたは厳密モードのいずれかで) 使用できるようになりました。<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));上記のルーチンは次の出力を行います:
int(9)
戻り値の型宣言
PHP 7 では戻り値の型宣言のサポートが追加されました。パラメーターの型宣言と同様に、戻り値の型宣言では関数の戻り値の型を指定します。使用可能な型は、パラメータ宣言で使用できる型と同じです。<?php function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); }
null 合体演算子
日常の使用では三項式と isset() が同時に使用される状況が多数あるため、null 合体演算子 ( ??) この糖衣構文。変数が存在し、NULL でない場合はそれ自体の値を返し、それ以外の場合は 2 番目のオペランドを返します。<?php // Fetches the value of $_GET['user'] and returns 'nobody' if it does not exist. $username = $_GET['user'] ?? 'nobody'; // This is equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; // Coalesces can be chained: this will return the first defined value out of $_GET['user'], $_POST['user'], and 'nobody'. $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; ?>
Spaceship 演算子 (結合比較演算子)
spaceship 演算子は、2 つの式を比較するために使用されます。 $a が $b より小さい場合、等しい場合、または $b より大きい場合は、それぞれ -1、0、または 1 を返します。比較の原則は、PHP の通常の比較ルールに従います。<?php // 整数 echo 1 <=> '1'; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点数 echo '1.50' <=> 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 ?>
define()を介して定数配列を定義
define() を介して定義できるようになりました。 PHP5.6 では、
const を介してのみ定義できます。
define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat"
Closure::call()
Closure::call() パフォーマンスが向上し、短く簡潔な一時バインディングになりました。 メソッドをクロージャします。オブジェクト上でそれを呼び出します。
<?php class A {private $x = 1;} // PHP 7 之前版本的代码 $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包 echo $getX(); // PHP 7+ 及更高版本的代码 $getX = function() {return $this->x;}; echo $getX->call(new A);上記のルーチンは次の出力を行います:
1グループ使用宣言 同じ
名前空間 からインポートされたクラス、関数、および定数をパススルーできるようになりました単一使用 ステートメントは一度にインポートされます。
<?php // PHP 7 之前的代码 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; // PHP 7+ 及更高版本的代码 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}; ?>
ジェネレーターは式を返すことができます
この機能は、PHP 5.5 バージョンで導入されたジェネレーター機能に基づいて構築されています。ジェネレーター関数の return 構文を使用して、式を返すことができます (ただし、参照値を返すことはできません)。ジェネレーターの戻り値は、Generator::getReturn() メソッドを呼び出すことで取得できますが、このメソッドは、プロセッサが作業の生成を終了した後に Called を 1 回生成する場合にのみ使用できます。整数除算関数 intdiv()
## への移行 #Null 可能な型
型の前に疑問符を追加することで、パラメーターと戻り値の型を Null 可能にできるようになりました。この機能が有効な場合、渡されるパラメーターまたは関数によって返される結果は、指定された型または null のいずれかになります。
<?php function testReturn(): ?string { return 'elePHPant'; } var_dump(testReturn()); function testReturn(): ?string { return null; } var_dump(testReturn()); function test(?string $name) { var_dump($name); } test('elePHPant'); test(null); test();上記のルーチンは次の出力を行います:
string(10) "elePHPant" NULL string(10) "elePHPant" NULL Uncaught Error: Too few arguments to function test(), 0 passed in...
Void 関数
新しい戻り値の型 void が導入されました。戻り値が void 型で宣言されているメソッドは、単純に return
ステートメントを省略するか、空の return ステートメントを使用します。 NULL は、void 関数の正当な戻り値ではありません。
<?php function swap(&$left, &$right) : void { if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp; } $a = 1; $b = 2; var_dump(swap($a, $b), $a, $b);
上記のルーチンは次の出力を行います:
null int(2) int(1) Symmetric array destructuring短い配列構文 ([]) は list() 構文の代替となり、配列の値を代入するために使用できます。いくつかの変数 (foreach に含まれる)。
<?php $data = [ [1, 'Tom'], [2, 'Fred'], ]; // list() style list($id1, $name1) = $data[0]; // [] style [$id1, $name1] = $data[0]; // list() style foreach ($data as list($id, $name)) { // logic here with $id and $name } // [] style foreach ($data as [$id, $name]) { // logic here with $id and $name }
クラス定数の可視性
クラス定数の可視性の設定がサポートされるようになりました。
<?php class ConstDemo { const PUBLIC_CONST_A = 1; public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4; }iterable
<strong> 疑似クラス</strong>
现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。
<?php function iterator(iterable $iter) : iterable { foreach ($iter as $val) { // } }
多异常捕获处理
一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。
<?php try { // some code } catch (FirstException | SecondException $e) { // handle first and second exceptions }
list()现在支持键名
现在list()和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)
<?php $data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ]; // list() style list("id" => $id1, "name" => $name1) = $data[0]; // [] style ["id" => $id1, "name" => $name1] = $data[0]; // list() style foreach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name } // [] style foreach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name }
四、从PHP 7.1.x 移植到 PHP 7.2.x
新的对象类型
这种新的对象类型, object, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。
<?php function test(object $obj) : object { return new SplQueue(); } test(new StdClass());
允许重写抽象方法(Abstract method)
当一个抽象类继承于另外一个抽象类的时候,继承后的抽象类可以重写被继承的抽象类的抽象方法。
abstract class A { abstract function test(string $s); } abstract class B extends A { // overridden - still maintaining contravariance for parameters and covariance for return abstract function test($s) : int; }
扩展了参数类型
重写方法和接口实现的参数类型现在可以省略了。不过这仍然是符合LSP,因为现在这种参数类型是逆变的。
interface A { public function Test(array $input); } class B implements A { public function Test($input){} // type omitted for $input }
允许分组命名空间的尾部逗号
命名空间可以在PHP 7中使用尾随逗号进行分组引入。
use Foo\Bar\{ Foo, Bar, Baz, };
以上がPHP5.5 から PHP7.2 への新機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

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

ホットトピック









