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公式ドキュメント