(PHP 5 >= 5.4.0)
Closure::bindTo — Duplica la closure con una nuova associazione all'oggetto e alla visibilità della classe
Crea e restituisce una nuova funzione anonima come questa con lo stesso corpo e con le stesse variabili associate, ma possibilmente con un altro oggetto associato e una nuova visibilità della classe.
“L'oggetto associato” determina il valore che avrà $this
nel corpo della funzione e nella “visibilità della classe” e scope represents a class
which determines which private and protected members the anonymous
function will be able to access. Namely, the members that will be
visible are the same as if the anonymous function were a method of
the class given as value of the newscope
parameter.
Le closures statiche non possono avere nessun oggetto associato (il valore del parametro
newthis
deve essere NULL
), ma questa funzione può
comunque essere utilizzata per cambiare la loro visibilità..
This function will ensure that for a non-static closure, having a bound
instance will imply being scoped and vice-versa. To this end,
non-static closures that are given a scope but a NULL
instance are made
static and non-static non-scoped closures that are given a non-null
instance are scoped to an unspecified class.
Nota:
Se hai soltanto intenzione di duplicare la funzione anonima, invece puoi usare la clonazione.
newthis
The object to which the given anonymous function should be bound, or
NULL
for the closure to be unbound.
newscope
The class scope to which associate the closure is to be associated, or 'static' to keep the current one. If an object is given, the type of the object will be used instead. This determines the visibility of protected and private methods of the bound object.
Restituisce un nuovo oggetto Closure creato.
o FALSE
in caso di fallimento
Example #1 Esempio di Closure::bindTo()
<?php
class A {
function __construct($val) {
$this->val = $val;
}
function getClosure() {
//restituisce la closure associata con il suo oggetto e con la sua visibilità
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";
?>
Il precedente esempio visualizzerà qualcosa simile a:
1 2