Пример #1
0
    /**
     * @param ReflectionMethod $method
     * @param Meta $meta
     * @return string
     */
    private function methodProxy(ReflectionMethod $method, Meta $meta)
    {
        $property = $meta->findProperty($method->getName());
        if (!$property) {
            // No need for a proxy if not related to a property
            return null;
        }
        if ($property->isProperty()) {
            // Properties are loaded straight-up, no need for proxies
            return null;
        }
        $parts = array();
        $arguments = array();
        foreach ($method->getParameters() as $parameter) {
            $variable = '$' . $parameter->getName();
            $parts[] = $variable;
            $arg = $variable;
            if ($parameter->isOptional()) {
                $arg .= ' = ' . var_export($parameter->getDefaultValue(), true);
            }
            if ($parameter->isPassedByReference()) {
                $arg = "& {$arg}";
            } elseif ($c = $parameter->getClass()) {
                $arg = $c->getName() . ' ' . $arg;
            }
            if ($parameter->isArray()) {
                $arg = "array {$arg}";
            }
            $arguments[] = $arg;
        }
        $parts = implode(', ', $parts);
        $arguments = implode(', ', $arguments);
        $name = var_export($method->getName(), true);
        $propertyName = var_export($property->getName(), true);
        return <<<FUNC

    function {$method->getName()}({$arguments})
    {
        self::__loadProperty({$name}, {$propertyName});
        return parent::{$method->getName()}({$parts});
    }

FUNC;
    }