Closure::bindTo

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

Closure::bindTo — 새 바인딩된 개체 및 클래스 범위로 클로저를 복제합니다.


설명

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

이 함수와 동일한 본문 및 바인딩된 변수를 사용하여 새 익명 함수를 만들고 반환하지만 바인딩된 개체와 새 클래스 범위가 다를 수 있습니다.

"바운드 개체"는 $this가 함수 본문에서 가질 값을 결정하고 "class scope"는 익명 함수가 액세스할 수 있는 private 및 protected 멤버를 결정하는 클래스를 나타냅니다. 즉, 익명 함수가 newScope 매개변수의 값으로 제공된 클래스의 메소드인 것처럼 표시될 멤버는 동일합니다.

정적 클로저는 바인딩된 객체를 가질 수 없지만(newThis 매개변수의 값은 null이어야 함) 그럼에도 불구하고 이 함수를 사용하여 클래스 범위를 변경할 수 있습니다.

이 함수는 비정적 클로저의 경우 바인딩된 인스턴스가 범위 지정을 의미하고 그 반대의 경우도 마찬가지임을 보장합니다. 이를 위해 범위가 지정되지만 null 인스턴스는 정적이 아닌 비정적 클로저가 되고 null이 아닌 인스턴스가 제공되는 비정적 범위가 지정되지 않은 클로저는 지정되지 않은 클래스로 범위가 지정됩니다.

메모: 익명 함수만 복제하려는 경우 대신 복제를 사용할 수 있습니다.


매개변수

newThis
지정된 익명 함수가 바인딩되어야 하는 개체 또는 클로저가 바인딩 해제될 경우 null입니다.
newScope
클로저가 연결될 클래스 범위 또는 현재 항목을 유지하려면 'static'입니다. 객체가 주어지면 객체의 유형이 대신 사용됩니다. 이것은 바인딩된 객체의 protected 및 private 메서드의 가시성을 결정합니다. 내부 클래스(객체)를 이 매개변수로 전달할 수 없습니다.

반환 값

새로운 Closure 객체를 반환하거나 실패 시 null을 반환합니다.


Examples

예제 #1 Closure::bindTo() 예제

                  
<?php

class A {
    private $val;
    function __construct($val) {
        $this->val = $val;
    }
    function getClosure() {
        //returns closure bound to this object and scope
        return function() { return $this->val; };
    }
}

$ob1 = new A(1);
$ob2 = new A(2);

$cl = $ob1->getClosure();
echo $cl(), "\n";
$cl = $cl->bindTo($ob2);
echo $cl(), "\n";
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

1
2
                

기타