1. Go to this page and download the library: Download innmind/specification library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
innmind / specification example snippets
use Innmind\Specification\{
Specification,
Composite,
Operator,
Not,
Comparator,
Sign,
};
class User
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
class AndSpecification implements Composite
{
private $left;
private $right;
public function __construct(Specification $left, Specification $right)
{
$this->left = $left;
$this->right = $right;
}
public function left(): Specification
{
return $this->left;
}
public function operator(): Operator
{
return Operator::and;
}
public function right(): Specification
{
return $this->right;
}
public function isSatisfiedBy(User $user): bool
{
return $this->left->isSatisfiedBy($user) && $this->right->isSatisfiedBy($user);
}
}
class OrSpecification implements Composite
{
private $left;
private $right;
public function __construct(Specification $left, Specification $right)
{
$this->left = $left;
$this->right = $right;
}
public function left(): Specification
{
return $this->left;
}
public function operator(): Operator
{
return Operator::or;
}
public function right(): Specification
{
return $this->right;
}
public function isSatisfiedBy(User $user): bool
{
return $this->left->isSatisfiedBy($user) || $this->right->isSatisfiedBy($user);
}
}
class NotSpecification implements Not
{
private $specification;
public function __construct(Specification $specification)
{
$this->specification = $specification;
}
public function specification(): Specification
{
return $this->specification;
}
public function isSatisfiedBy(User $user): bool
{
return !$this->specification->isSatisfiedBy($user);
}
}
class NameSpecification implements Comparator
{
private $name;
public function __construct(string $name)
{
$this->name = $name;
}
public function and(Specification $specification): Composite
{
return new AndSpecification($this, $specification);
}
public function or(Specification $specification): Composite
{
return new OrSpecification($this, $specification);
}
public function not(): Not
{
return new NotSpecification($this);
}
public function property(): string
{
return 'name';
}
public function sign(): Sign
{
return Sign::equality;
}
public function value()
{
return $this->name;
}
public function isSatisfiedBy(User $user): bool
{
return $user->name === $this->name;
}
}
$spec = (new NameSpecification('John'))
->or(new NameSpecification('Doe'))
->or((new NameSpecification('John Doe'))->not());
$spec->isSatisfiedBy(new User('John')); //true
$spec->isSatisfiedBy(new User('Doe')); //true
$spec->isSatisfiedBy(new User('John Doe')); //false
$spec->isSatisfiedBy(new User('42')); //true
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.