1. Go to this page and download the library: Download yceruto/decorator 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/ */
yceruto / decorator example snippets
use Yceruto\Decorator\Attribute\DecoratorAttribute;
use Yceruto\Decorator\CallableDecorator;
use Yceruto\Decorator\DecoratorInterface;
#[\Attribute(\Attribute::TARGET_METHOD)]
class Debug extends DecoratorAttribute implements DecoratorInterface
{
public function decorate(\Closure $func): \Closure
{
return function (mixed ...$args) use ($func): mixed
{
echo "Do something before\n";
$result = $func(...$args);
echo "Do something after\n";
return $result;
};
}
}
class Greeting
{
#[Debug]
public function sayHello(string $name): void
{
echo "Hello $name!\n";
}
}
$greeting = new Greeting();
$decorator = new CallableDecorator();
$decorator->call($greeting->sayHello(...), 'John');
use Yceruto\Decorator\Attribute\DecoratorAttribute;
use Yceruto\Decorator\DecoratorInterface;
#[\Attribute(\Attribute::TARGET_METHOD)]
class Debug extends DecoratorAttribute
{
}
class DebugDecorator implements DecoratorInterface
{
public function decorate(\Closure $func): \Closure
{
return function (mixed ...$args) use ($func): mixed
{
echo "Do something before\n";
$result = $func(...$args);
echo "Do something after\n";
return $result;
};
}
}
#[Debug]
class Greeting
{
public function __invoke(string $name): void
{
echo "Hello $name!\n";
}
}
use Yceruto\Decorator\Attribute\DecoratorAttribute;
use Yceruto\Decorator\DecoratorInterface;
#[\Attribute(\Attribute::TARGET_METHOD)]
class Debug extends DecoratorAttribute implements DecoratorInterface
{
public function __construct(
private readonly string $prefix = '',
) {
}
public function decorate(\Closure $func, self $debug = new self()): \Closure
{
return function (mixed ...$args) use ($func, $debug): mixed
{
echo $debug->prefix."Do something before\n";
$result = $func(...$args);
echo $debug->prefix."Do something after\n";
return $result;
};
}
}
class Greeting
{
#[Debug(prefix: 'Greeting: ')]
public function sayHello(string $name): void
{
echo "Hello $name!\n";
}
}
use Yceruto\Decorator\Attribute\Compound;
#[\Attribute(\Attribute::TARGET_METHOD)]
class Greetings extends Compound
{
/**
* @return array<DecoratorAttribute>
*/
public function getDecorators(array $options): array
{
return [
new Hello(),
new Welcome(),
// ...
];
}
}
class Greeting
{
#[Greetings]
public function __invoke(): void
{
// ...
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.