php7 の匿名クラス、インポートされたクラス、クロージャの使用法などの新機能の紹介

伊谢尔伦
リリース: 2023-03-11 15:10:01
オリジナル
2619 人が閲覧しました

匿名クラス (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, &#39;A&#39;); // 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート