/peridot-scope

Scopes for function binding and mixins

Primary LanguagePHPMIT LicenseMIT

Peridot Scope

Build Status HHVM Status

Peridot Scope.

Scopes allow safe binding of state for closures and offers a mechanism for mixing state and behavior in via child scopes.

Extracted from the Peridot testing framework.

##Usage

We recommend installing this package via composer:

$ composer require peridot-php/peridot-scope:~1.0

###Creating a Scope

$scope = new Scope();
$scope->name = "Brian";

$fnWithName = function() {
    print $this->name;
};

$fnWithName = $scope->peridotBindTo($fnWithName);

$fnWithName(); //prints "Brian"

###Using the ScopeTrait

If an existing class can benefit from a Scope, you can use the ScopeTrait

class Test
{
    use ScopeTrait;
    
    protected $definition;
    
    public function __construct(callable $definition)
    {
        $this->definition = $definition; 
    }
    
    /**
     * Return the definition bound to a scope
     */
    public function getDefinition()
    {
        $scope = $this->getScope();
        return $scope->peridotBindTo($this->definition);
    }
}

##Mixins

You can mix behavior in via child scopes.