functional-php/src/Predicates/objects.php
2018-07-08 18:05:25 +02:00

57 lines
1.3 KiB
PHP

<?php
/**
* Copyright 2018 Kacper Donat
*
* @author Kacper "Kadet" Donat <kacper@kadet.net>
*
* Full license available in separate LICENSE file
*/
namespace Kadet\Functional\Predicates;
use function Kadet\Functional\predicate;
use Kadet\Functional\Predicate\ClosurePredicate;
/**
* @param string $method
* @param $predicate
* @param array $args
*
* @return \Kadet\Functional\Predicate
*/
function method(string $method, $predicate, ...$args)
{
$predicate = predicate($predicate);
return new ClosurePredicate(function ($object) use ($method, $predicate, $args) {
return $predicate($object->{$method}($args));
});
}
/**
* @param string $property
* @param $predicate
*
* @return \Kadet\Functional\Predicate
*/
function property(string $property, $predicate) {
$predicate = predicate($predicate);
return new ClosurePredicate(function ($object) use ($property, $predicate) {
if (isset($object->$property)) {
return $predicate($object->$property);
} elseif (method_exists($object, $getter = 'get'.ucfirst($property))) {
return $predicate($object->$getter());
} else {
return false;
}
});
}
function instance(string $class)
{
return new ClosurePredicate(function ($value) use ($class) {
return $value instanceof $class;
});
}