Closure::bindTo
PHP Manual
PHP Manual»Closure»Closure::bindTo

Closure::bindTo

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

Closure::bindTo — Duplica el cierre con un nuevo objeto vinculado y un nuevo ámbito de clase.

Descripción

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

Crea y devuelve una nueva función anónima con el mismo cuerpo y las mismas variables vinculadas que la original, pero con un objeto vinculado que puede ser diferente, y un nuevo ámbito de clase.

El objeto vinculado determina el valor que $this tendrá en el cuerpo de la función, y el ámbito de clase representa una clase que determina a qué miembros privados y protegidos la función anónima tendrá acceso. En otras palabras, los miembros que serán visibles serán los mismos que si la función anónima fuera un método de la clase pasada a través del parámetro newScope.

Los cierres estáticos no pueden tener ningún objeto vinculado (el valor del parámetro newThis debería ser null), pero este método puede utilizarse igualmente para cambiar su ámbito de clase.

Este método garantiza que, para un cierre no estático, tener una instancia vinculada implica tener un ámbito, y viceversa. Con este fin, los cierres no estáticos a los que se les da un ámbito pero una instancia null se convierten en estáticos, y los cierres no estáticos sin ámbito a los que se les da una instancia no nula reciben como ámbito una clase no especificada.

Nota:

Si solo se desea duplicar la función anónima, puede utilizarse el clonado en su lugar.

Parámetros

newThis

El objeto al que vincular la función anónima, o null para que el cierre quede desvinculado.

newScope

El ámbito de clase a asociar con el cierre, o 'static' para conservar el ámbito actual. Si se pasa un objeto, su tipo será utilizado. Esto determina la visibilidad de los métodos protegidos y privados del objeto vinculado. No está permitido pasar (un objeto de) una clase interna para este parámetro.

Valores devueltos

Devuelve el objeto Closure recién creado, o null en caso de error.

Historial de cambios

Versión Descripción
8.5.0 Vincular una instancia a un cierre estático, o vincular un método de una jerarquía de clases incompatible, ahora está obsoleto (estos casos ya emitían un E_WARNING).

Ejemplos

Ejemplo #1 Ejemplo Closure::bindTo()

<?php

class A
{
    private $val;

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

    public function getClosure()
    {
        //Retorna un cierre vinculado a este objeto y ámbito
        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";
?>

Resultado del ejemplo anterior es similar a:

1
2

Véase también

To Top