« Closure::__construct
Closure::bindTo »

Closure::bind

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

Closure::bind — バインドされたオブジェクトとクラスのスコープでクロージャを複製する

説明

public static function Closure::bind(Closure $closure, ?object $newThis, object|string|null $newScope = "static"): ?Closure

このメソッドは、staticメソッド版の Closure::bindTo() です。 詳細な説明は Closure::bindTo() のドキュメントを参照ください。

パラメータ

closure

バインドする無名関数。

newThis

指定した無名関数をバインドするオブジェクト。クロージャのバインドを解除するには null を指定します。

newScope

クロージャを関連づけるクラススコープ、あるいは 'static' で現在のスコープを維持します。 オブジェクトを渡した場合は、そのオブジェクトの型をその代わりに使います。 これは、バインドしたオブジェクトの protected メソッドや private メソッドのアクセス権を決めます。 このパラメータに、内部クラスのオブジェクトを渡すことはできません。

戻り値

新しい Closure オブジェクトを返します。 失敗した場合は null を返します。

変更履歴

バージョン 説明
8.5.0 インスタンスを static なクロージャにバインドすることや、 互換性のないクラス階層間でメソッドをバインドすることは、非推奨になりました (これらの場合は、既に E_WARNING が発生していました)。

例

例1 Closure::bind() の例

<?php
class A {
    private static $sfoo = 1;
    private $ifoo = 2;
}
$cl1 = static function() {
    return A::$sfoo;
};
$cl2 = function() {
    return $this->ifoo;
};

$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?>

上の例の出力は、 たとえば以下のようになります。

1
2

参考

関連キーワード:
Closure   バインド   クロージャ   static   スコープ   bind   複製   bindTo   無名   private   closure   newThis   newScope   sfoo   ifoo   return   construct   詳細   ドキュメント   解除   関連   維持   protected   アクセス権   内部
関連する関数・ページ:
closure.bindto   class.closure   closure.fromcallable   closure.call   closure.construct   closure.getcurrent