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
기타
- 익명 함수
- Closure::bind() - 특정 바인딩된 개체 및 클래스 범위로 클로저를 복제합니다.