array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'closure.bindto.php', 1 => 'Closure::bindTo', ), 'up' => array ( 0 => 'class.closure.php', 1 => 'Closure', ), 'prev' => array ( 0 => 'closure.bind.php', 1 => 'Closure::bind', ), 'next' => array ( 0 => 'closure.call.php', 1 => 'Closure::call', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'language/predefined/closure/bindto.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Closure::bindTo — Дублирует замыкание с новым связанным объектом и областью видимости класса
Метод создаёт и возвращает новую анонимную функцию с телом и связанными переменными как у анонимной функции, которую связывает метод, но с другим связанным объектом и новой областью видимости класса.
«Связанный объект» определяет значение $this
,
которое будет доступно в теле функции, а «область видимости класса»
представляет класс, который определяет, к каким защищённым
и закрытым членам будет доступ у анонимной функции.
Если точнее, то это те члены, которые будут видны так же, как если бы
анонимная функция была методом класса, который передали как значение
параметра newScope
.
Статические замыкания нельзя связывать с объектом — значение параметра
newThis
должно равняться null
, но эта функция
всё равно умеет изменять область видимости класса статического замыкания.
Метод гарантирует, что для нестатического замыкания, которое связали
с объектом, метод задаст область видимости и наоборот.
Для этого а) нестатическим замыканиям, для которых установили область видимости,
но передали null
вместо объекта, метод создаст статическое замыкание;
б) нестатическим замыканиям, для которых не установили область видимости,
но передали объект, — метод создаст замыкание, которому ограничит область
видимости неопределённым классом.
Замечание:
Вместо этого метода пользуются клонированием, когда требуется только дублировать анонимную функцию.
newThis
Объект, с которым метод свяжет анонимную функцию,
или null
, чтобы метод не связывал замыкание.
newScope
Область видимости класса, с которой метод свяжет замыкание, или ключевое слово static для сохранения текущей области видимости. Если передали объект, то областью видимости класса будет тип этого объекта. Этот параметр определяет видимость защищённых и закрытых методов связанного объекта. Нельзя передавать в параметр название или экземпляр объекта внутреннего PHP-класса.
Метод возвращает новый объект замыкания Closure
или null
, если возникла ошибка.
Пример #1 Пример использования метода Closure::bindTo()
<?php
class A
{
private $val;
function __construct($val)
{
$this->val = $val;
}
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