Closure::bind
PHP Manual
PHP Manual»Closure»Closure::bind

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

参考

To Top