PHP’de Closure
objelerinin scopelerini bind
methodunu kullanarak değiştirebiliriz.
<?php
class ClosureDispatcher
{
public function call(Closure $closure, $scope = NULL) {
if(!is_null($scope))
$closure = Closure::bind($closure, $scope, $scope);
return $closure();
}
}
class Person
{
protected $name = 'Aristona';
}
$dispatcher = new ClosureDispatcher();
$person = new Person();
$ret = $dispatcher->call(function () {
return $this->name; // Aristona
}, $person);
Kafa karıştırıcı bir konu gibi görünüyor ancak hiçte öyle değil!