Вход Регистрация
Файл: framework/control/injector/AopProxyService.php
Строк: 43
<?php

/**
 * A class that proxies another, allowing various functionality to be
 * injected.
 *
 * @package framework
 * @subpackage injector
 */
class AopProxyService {
    public 
$beforeCall = array();

    public 
$afterCall = array();

    public 
$proxied;

    
/**
     * Because we don't know exactly how the proxied class is usually called,
     * provide a default constructor
     */
    
public function __construct() {

    }

    public function 
__call($method$args) {
        if (
method_exists($this->proxied$method)) {
            
$continue true;
            
$result null;

            if (isset(
$this->beforeCall[$method])) {
                
$methods $this->beforeCall[$method];
                if (!
is_array($methods)) {
                    
$methods = array($methods);
                }
                foreach (
$methods as $handler) {
                    
$alternateReturn null;
                    
$proceed $handler->beforeCall($this->proxied$method$args$alternateReturn);
                    if (
$proceed === false) {
                        
$continue false;
                        
// if something is set in, use it
                        
if ($alternateReturn) {
                            
$result $alternateReturn;
                        }
                    }
                }
            }

            if (
$continue) {
                
$result call_user_func_array(array($this->proxied$method), $args);

                if (isset(
$this->afterCall[$method])) {
                    
$methods $this->afterCall[$method];
                    if (!
is_array($methods)) {
                        
$methods = array($methods);
                    }
                    foreach (
$methods as $handler) {
                        
$return $handler->afterCall($this->proxied$method$args$result);
                        if (!
is_null($return)) {
                            
$result $return;
                        }
                    }
                }
            }

            return 
$result;
        }
    }
}
Онлайн: 1
Реклама