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, доступное в теле функции, а «область видимости класса» представляет класс, который определяет, какие защищённые и закрытые члены класса доступны анонимной функции. Анонимная функция увидит те же члены класса, которые видела бы, если бы принадлежала к методам класса, который установили как значение параметра newScope.

Статические замыкания невозможно привязать к объекту из-за недоступности контекста объекта в статических замыканиях. Поэтому в параметр newThis передают значение null при вызове метода на статических замыканиях. Но метод всё-таки умеет изменять область видимости класса для статического замыкания.

Метод гарантирует, что нестатическое замыкание, которое привязали к экземпляру класса, получит доступ к контексту объекта, а без привязки сохранит текущую область видимости. Поэтому нестатические замыкания, для которых указали область видимости, но вместо объекта в первом аргументе передали null, становятся статическими, а для которых не указали область видимости, но установили объект привязки, получат доступ только к открытым членам объекта.

Замечание:

Вместо этого метода пользуются клонированием, когда требуется только дублировать анонимную функцию.

Список параметров

newThis

Объект, к которому требуется привязать анонимную функцию, или null, если привязка не требуется.

newScope

Название класса, к области видимости которого требуется привязать замыкание, или ключевое слово 'static' для сохранения замыканием текущей области видимости. При передаче объекта контекст класса определяется типом объекта. Параметр определяет видимость защищённых и закрытых членов объекта, к которому привязывается замыкание. Нельзя передавать в параметр название или экземпляр объекта внутреннего PHP-класса.

Возвращаемые значения

Метод возвращает новый объект класса Closure или null, если возникла ошибка.

Примеры

Пример #1 Пример привязки замыкания методом Closure::bindTo()

<?php

class A
{
private
$val;

public function
__construct($val)
{
$this->val = $val;
}

public function
getClosure()
{
// Метод возвращает замыкание, привязанное к текущим объекту и области видимости
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

Смотрите также