https://github.com/peridot-php/peridot-scope
Scopes for function binding and mixins
https://github.com/peridot-php/peridot-scope
Last synced: about 1 year ago
JSON representation
Scopes for function binding and mixins
- Host: GitHub
- URL: https://github.com/peridot-php/peridot-scope
- Owner: peridot-php
- License: mit
- Created: 2014-11-14T00:32:01.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-07-31T00:12:46.000Z (almost 10 years ago)
- Last Synced: 2025-05-07T21:05:16.845Z (about 1 year ago)
- Language: PHP
- Size: 15.6 KB
- Stars: 1
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Peridot Scope
=============
[](https://travis-ci.org/peridot-php/peridot-scope) [](http://hhvm.h4cc.de/package/peridot-php/peridot-scope)
Peridot [Scope](https://github.com/peridot-php/peridot/wiki/Scopes).
Scopes allow safe binding of state for closures and offers a mechanism
for mixing state and behavior in via [child scopes](https://github.com/peridot-php/peridot/wiki/Scopes#extending-functionality-with-scopes).
Extracted from the [Peridot](http://peridot-php.github.io/) testing framework.
##Usage
We recommend installing this package via composer:
```
$ composer require peridot-php/peridot-scope:~1.0
```
###Creating a Scope
```php
$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`
```php
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](https://github.com/peridot-php/peridot/wiki/Scopes#extending-functionality-with-scopes).