Closure
PHP Manual

Closure::bindTo

(PHP 5 >= 5.4.0, PHP 7)

Closure::bindTo Duplicar la clausura con un objeto vinculado y ámbito de clase nuevos

Descripción

public Closure Closure::bindTo ( object $newthis [, mixed $newscope = "static" ] )

Crea y devuelve una nueva función anónima con el cuerpo y variables vinculadas como ésta, pero posiblemente con un objeto vinculado 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 los miembros privados y protegidos a los que será capaz de acceder la función anónima. Concretamente, los miembros que serán visibles son los mismos que si la función anónima fuese un método de la clase dada como valor del parámetro newscope.

Las clausuras estáticas no pueden tener ningún objeto vinculado (el valor del parámetro newthis debería ser NULL), pero esta función puede, no obstante, usarse para cambiar su ámbito de clase.

Esta función se asegurará de que a una clausura no estática que tenga una instancia vinculada se le aplique un ámbito y viceversa. En este punto, las clausuras no estáticas que le son dadas un ámbito, excepto una instancia NULL, son hechas estáticas, y las clausuras no estáticas y sin ámbito que le son dados una instancia no nula se les aplica un ámbito de clase no especificado.

Nota:

Si solamente se quieren duplicar las funciones anónimas, se puede usar cloning en su lugar.

Parámetros

newthis

El objeto al que la función anónima dada debería ser vinculado, o NULL para que la clausura sea desvinculada.

newscope

El ámbito de clase a la que asociar la clausura, o 'static' para mantener el actual. Si se proporciona un objeto, el tipo del mismo se usará en su lugar. Esto determina la visibilidad de métodos protegidos y privados del objeto vinculado.

Valores devueltos

Devuelve el objeto Closure recién creado o FALSE en caso de error

Ejemplos

Ejemplo #1 Ejemplo de Closure::bindTo()

<?php

class {
    function 
__construct($val) {
        
$this->val $val;
    }
    function 
getClosure() {
        
//devuelve la clausura vinculada a este objeto y el á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";
?>

El resultado del ejemplo sería algo similar a:

1
2

Ver también


Closure
PHP Manual