ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP, Closureクラス, new演算子でインスタンスは生成できない

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

Closureクラスは無名関数の型として使われますが、クラスといえば new演算子でしょ? といっても過言じゃないインスタンスの生成ができません。

どうやら無名関数やクロージャ、アロー関数の戻り値以外では使われたくないらしい。

わざわざ __construct() で禁止にしているほどです。

Closureクラスでインスタンスを作成するとError例外が発生します。

<?php

$closure = new Closure();
実行結果
PHP Fatal error:  Uncaught Error: Instantiation of class Closure is not allowed in /home/vagrant/php-test.php:3
Stack trace:
#0 {main}
  thrown in /home/vagrant/php-test.php on line 3

『Closureクラスのインスタンス生成は許可されていない』

そのまんまのメッセージですね?

Closure::__construct()の説明でも、『インスタンス作成を無効化したコンストラクタ』とあります。

__construct()をコールすると Error例外をスローする処理が入っているのでしょう。

ためしに、例外をキャッチしてスルーさせたら変数に何が入るのかやってみましょうか?

だれもが予想できる『代入しない』が答えだと思いますが。

$closure = 'default';

try {
    $closure = new Closure();
} catch( Error $e ) {

} finally {
    var_dump($closure);
}
実行結果
string(7) "default"

やっぱりそうですね?

ちなみに、Closureクラスで用意されたメソッドはすべて staticです。インスタンス生成は必要ありません。

そこは用意周到。

PHP公式ドキュメント

クラスメソッド - Closure - __construct

前の投稿
PHP, Closure::fromCallable(), 関数名の文字列から関数を実行する。
PHP, Closureクラス, 外からクラス内の隠蔽したプロパティが見えるんですけど?
次の投稿

コメントを残す