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!

Redis kullanımı ve incelikleri

Published on February 13, 2016

OOP'in ötesinde...

Published on August 21, 2015