The
transform
function executes a closure on a given value if the value is not blank and then returns the return value of the closure:<?php $callback = function ($value) {
return $value * 2;
};
$result = transform(5, $callback);
<?php protected function transform($value, callable $callback, $default = null)
{
return transform(
$value, $callback, func_num_args() === 3 ? $default : new MissingValue
);
}
}
<?php public function testTransform()
{
$this->assertEquals(10, transform(5, function ($value) {
return $value * 2;
}));
$this->assertNull(transform(null, function () {
return 10;
<?php return $value * 2;
}));
$this->assertNull(transform(null, function () {
return 10;
}));
}
public function testTransformDefaultWhenBlank()
<?php public function testTransformDefaultWhenBlank()
{
$this->assertSame('baz', transform(null, function () {
return 'bar';
}, 'baz'));
$this->assertSame('baz', transform('', function () {
return 'bar';
<?php return 'bar';
}, 'baz'));
$this->assertSame('baz', transform('', function () {
return 'bar';
}, function () {
return 'baz';
}));
}
public function testWith()
<?php }));
assertType('int|null', transform(optional(), fn () => 1));
assertType('int|string', transform(optional(), fn () => 1, fn () => 'string'));
<?php assertType('int|null', transform(optional(), fn () => 1));
assertType('int|string', transform(optional(), fn () => 1, fn () => 'string'));
assertType('int', transform('filled', fn () => 1));
<?php assertType('int|string', transform(optional(), fn () => 1, fn () => 'string'));
assertType('int', transform('filled', fn () => 1));
assertType('int', transform(['filled'], fn () => 1));
assertType('int', transform(new User(), fn () => 1));
<?php assertType('int', transform('filled', fn () => 1));
assertType('int', transform(['filled'], fn () => 1));
assertType('int', transform(new User(), fn () => 1));
<?php assertType('int', transform('filled', fn () => 1));
assertType('int', transform(['filled'], fn () => 1));
assertType('int', transform(new User(), fn () => 1));
assertType('null', transform(null, fn () => 1));
<?php assertType('int', transform(new User(), fn () => 1));
assertType('null', transform(null, fn () => 1));
assertType('null', transform('', fn () => 1));
assertType('null', transform([], fn () => 1));
<?php assertType('null', transform(null, fn () => 1));
assertType('null', transform('', fn () => 1));
assertType('null', transform([], fn () => 1));
assertType('int|null', rescue(fn () => 123));
<?php assertType('null', transform(null, fn () => 1));
assertType('null', transform('', fn () => 1));
assertType('null', transform([], fn () => 1));
assertType('int|null', rescue(fn () => 123));
assertType('int', rescue(fn () => 123, 345));