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.