$aspectName = '';
switch ($showCase) {
case 'cacheable':
$aspectName = 'Demo\\Aspect\\CachingAspect';
$example = new CacheableDemo();
$result = $example->getReport(12345);
// First call will take 0.1 second
echo "Result is: ", $result, PHP_EOL;
$result = $example->getReport(12346);
// This call is cached and result should be '12345'
echo "Result is: ", $result, PHP_EOL;
break;
case 'loggable':
$aspectName = 'Demo\\Aspect\\LoggingAspect';
$example = new LoggingDemo();
$example->execute('LoggingTask');
// Logging for dynamic methods
LoggingDemo::runByName('StaticTask');
// Logging for static methods
break;
case 'property-interceptor':
$aspectName = 'Demo\\Aspect\\PropertyInterceptorAspect';
$example = new PropertyDemo();
echo $example->publicProperty;
// Read public property
$example->publicProperty = 987;
// Write public property
$example->showProtected();
$example->setProtected(987);
break;
case 'dynamic-interceptor':