PHP5.5 から PHP7.2 への新機能

藏色散人
リリース: 2023-02-17 11:38:02
転載
3330 人が閲覧しました


1. PHP 5.5.x から PHP 5.6 に移行します。xx

式を使用して定数を定義する

PHP の以前のバージョンでは、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の指定には静的な値を使用する必要がありました。数値、文字列リテラル、その他の定数を含む数値式を使用して、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の設定を行うことができるようになりました。


        
ログイン後にコピー

これで、constキーワードを使用して、array型の定数を定義できるようになりました。


        
ログイン後にコピー

可変長パラメータ関数を定義するには...演算子を使用します

現在、func_get_args()# に依存することはできません。 ##、可変長パラメーター関数を実装するには、...演算子を使用します。

ログイン後にコピー

上記のルーチンは次の出力を行います:

$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 などの他のプログラミング言語では、これは連結演算子と呼ばれます。

ログイン後にコピー

上記のルーチンは次のように出力します:

6
ログイン後にコピー

use function と use const

use 演算子は、外部関数のインポートをサポートするように拡張されました。そして定数をクラスに追加します。対応する構造は、

use functionおよびuse constです。

ログイン後にコピー

上記のルーチンは出力します:

42 Name\Space\f
ログイン後にコピー

Use

hash_equals()タイミング攻撃を避けるために文字列を比較します

2. PHP 5.6 より.x PHP 7.0 に移植。x

スカラー型宣言

スカラー型宣言には、必須モード (デフォルト) と厳密モードの 2 つのモードがあります。 string、int、float、bool の型パラメータが (強制モードまたは厳密モードのいずれかで) 使用できるようになりました。


        
ログイン後にコピー

上記のルーチンは次の出力を行います:

int(9)
ログイン後にコピー

戻り値の型宣言

PHP 7 では戻り値の型宣言のサポートが追加されました。パラメーターの型宣言と同様に、戻り値の型宣言では関数の戻り値の型を指定します。使用可能な型は、パラメータ宣言で使用できる型と同じです。


        
ログイン後にコピー

null 合体演算子

日常の使用では三項式と isset() が同時に使用される状況が多数あるため、null 合体演算子 ( ??) この糖衣構文。変数が存在し、NULL でない場合はそれ自体の値を返し、それ以外の場合は 2 番目のオペランドを返します。

ログイン後にコピー

Spaceship 演算子 (結合比較演算子)

spaceship 演算子は、2 つの式を比較するために使用されます。 $a が $b より小さい場合、等しい場合、または $b より大きい場合は、それぞれ -1、0、または 1 を返します。比較の原則は、PHP の通常の比較ルールに従います。

 '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()パフォーマンスが向上し、短く簡潔な一時バインディングになりました。 メソッドをクロージャします。オブジェクト上でそれを呼び出します。

x;}; $getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包 echo $getX(); // PHP 7+ 及更高版本的代码 $getX = function() {return $this->x;}; echo $getX->call(new A);
ログイン後にコピー

上記のルーチンは次の出力を行います:

1
ログイン後にコピー

グループ使用宣言

同じ

名前空間からインポートされたクラス、関数、および定数をパススルーできるようになりました単一使用 ステートメントは一度にインポートされます。

ログイン後にコピー

ジェネレーターは式を返すことができます

この機能は、PHP 5.5 バージョンで導入されたジェネレーター機能に基づいて構築されています。ジェネレーター関数の return 構文を使用して、式を返すことができます (ただし、参照値を返すことはできません)。ジェネレーターの戻り値は、Generator::getReturn() メソッドを呼び出すことで取得できますが、このメソッドは、プロセッサが作業の生成を終了した後に Called を 1 回生成する場合にのみ使用できます。

整数除算関数intdiv()

##3. PHP 7.0.x から PHP 7.1.x

## への移行#Null 可能な型

型の前に疑問符を追加することで、パラメーターと戻り値の型を Null 可能にできるようになりました。この機能が有効な場合、渡されるパラメーターまたは関数によって返される結果は、指定された型または null のいずれかになります。


        
ログイン後にコピー

上記のルーチンは次の出力を行います:

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 関数の正当な戻り値ではありません。


        
ログイン後にコピー
上記のルーチンは次の出力を行います:
null int(2) int(1) Symmetric array destructuring
ログイン後にコピー

短い配列構文 ([]) は list() 構文の代替となり、配列の値を代入するために使用できます。いくつかの変数 (foreach に含まれる)。


        
ログイン後にコピー

クラス定数の可視性

クラス定数の可視性の設定がサポートされるようになりました。


        
ログイン後にコピー

iterable

疑似クラス

现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。


        
ログイン後にコピー

多异常捕获处理

一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。


        
ログイン後にコピー

list()现在支持键名

现在list()和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)

 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)返回任何对象类型。


        
ログイン後にコピー

允许重写抽象方法(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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!