匿名クラス (PHP 7)
は、新しいクラスによる匿名クラスのインスタンス化をサポートするようになりました。これは、一部の「使用後に焼き付ける」完全なクラス定義を置き換えるために使用できます。
<?php interface Logger { public function log(string $msg); } class Application { private $logger; public function getLogger(): Logger { return $this->logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application; $app->setLogger(new class implements Logger { public function log(string $msg) { echo $msg; } }); var_dump($app->getLogger()); ?>
上記のルーチンは出力します:
object(class@anonymous)#2 (0) {
}
Closure::call() (PHP 7)
Closure::call( ) のパフォーマンスが向上し、メソッドを オブジェクト のクロージャーに一時的にバインドして呼び出すための短く簡潔な方法になりました。
<?php class A {private $x = 1;} // Pre PHP 7 code $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // intermediate closure echo $getX(); // PHP 7+ code $getX = function() {return $this->x;}; echo $getX->call(new A);
上記のルーチンは出力します:
1
1
unserialize() のフィルタリングを提供する (PHP 7)
この機能は、信頼性の低いデータを解凍するためのより安全な方法を提供することを目的としています。ホワイトリストによりコードインジェクションの可能性を防ぎます。
<?php // converts all objects into PHP_Incomplete_Class object $data = unserialize($foo, ["allowed_classes" => false]); // converts all objects into PHP_Incomplete_Class object except those of MyClass and MyClass2 $data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]); // default behaviour (same as omitting the second argument) that accepts all classes $data = unserialize($foo, ["allowed_classes" => true]);
グループ use 宣言 (PHP 7)
同じ名前空間からインポートされたクラス、関数、定数を、単一の use ステートメントで一度にインポートできるようになりました。
りー以上がphp7 の匿名クラス、インポートされたクラス、クロージャの使用法などの新機能の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。