Closure::bindTo

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

Closure::bindTo Дублирует замыкание с новым связанным объектом и областью видимости класса

Описание

publicClosure::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

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

To Top