Welcome

This demo shows your an examples of AOP usage.

Please, choose one of available examples from navigation menu.
You can also try to run this code with XDebug.

Calling Around Interceptor for execution(array_values()) with arguments: [{"test":1,"code":2,"more":1}]
Calling Around Interceptor for execution(array_unique()) with arguments: [[1,2,1]]
Calling Around Interceptor for execution(array_flip()) with arguments: [[1,2]]
Calling Around Interceptor for execution(file_get_contents()) with arguments: ["\/app\/demos\/Demo\/Example\/FunctionDemo.php"]
Hello!
<?php
/*
 * Go! AOP framework
 *
 * @copyright Copyright 2014, Lisachenko Alexander <lisachenko.it@gmail.com>
 *
 * This source file is subject to the license that is bundled
 * with this source code in the file LICENSE.
 */

namespace Demo\Aspect;

use 
Go\Aop\Aspect;
use 
Go\Aop\Intercept\FunctionInvocation;
use 
Go\Lang\Annotation\Around;

/**
 * Function interceptor can intercept an access to the system functions
 */
class FunctionInterceptorAspect implements Aspect
{

    
/**
     * This advice intercepts an access to the array_*** function in Demo\Example\ namespace
     *
     * @param FunctionInvocation $invocation
     *
     * @Around("execution(Demo\Example\array_*(*))")
     *
     * @return mixed
     */
    
public function aroundArrayFunctions(FunctionInvocation $invocation)
    {
        echo 
'Calling Around Interceptor for ',
            
$invocation,
            
' with arguments: ',
            
json_encode($invocation->getArguments()),
            
PHP_EOL;

        return 
$invocation->proceed();
    }

    
/**
     * This advice intercepts an access to the file_get_contents() function
     *
     * @param FunctionInvocation $invocation
     *
     * @Around("execution(Demo\Example\file_get_contents(*))")
     *
     * @return mixed
     */
    
public function aroundFileGetContents(FunctionInvocation $invocation)
    {
        echo 
'Calling Around Interceptor for ',
            
$invocation,
            
' with arguments: ',
            
json_encode($invocation->getArguments()),
            
PHP_EOL;

        
// return $invocation->proceed(); // Do not call original file_get_contents()
        
return 'Hello!'// Override return value for function
    
}
}
<?php
/*
 * Go! AOP framework
 *
 * @copyright Copyright 2014, Lisachenko Alexander <lisachenko.it@gmail.com>
 *
 * This source file is subject to the license that is bundled
 * with this source code in the file LICENSE.
 */

namespace Demo\Example;

/**
 * In this class we use system functions that will be intercepted by aspect
 */
class FunctionDemo
{

    
/**
     * Some array transformer
     *
     * @param array $data Incoming array
     *
     * @return array|mixed Outcoming array
     */
    
public function testArrayFunctions(array $data = [])
    {
        return 
array_flip(array_unique(array_values($data)));
    }

    
/**
     * Outputs a file content
     */
    
public function testFileContent()
    {
        echo 
'<pre>'htmlspecialchars(file_get_contents(__FILE__)), '</pre>';
    }
}