Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Support/Symbol/ClassSymbol/MethodSymbol/MethodSymbol.php
Строк: 94
<?php

namespace ConcreteCoreSupportSymbolClassSymbolMethodSymbol;

use 
ConcreteCoreSupportSymbolClassSymbolClassSymbol;

class 
MethodSymbol
{
    
/**
     * @var ReflectionMethod
     */
    
protected $reflectionMethod;

    
/**
     * @var ClassSymbol
     */
    
protected $classSymbol;

    
/**
     * The method handle.
     *
     * @var string
     */
    
protected $handle;

    
/**
     * The parameters.
     *
     * @var ReflectionParameter[]
     */
    
protected $parameters = array();

    
/**
     * The docblock.
     *
     * @var string
     */
    
protected $comment;

    
/**
     * @param ReflectionMethod $method
     */
    
public function __construct(ClassSymbol $classReflectionMethod $method)
    {
        
$this->classSymbol $class;
        
$this->reflectionMethod $method;
        
$this->parameters $method->getParameters();
        
$this->handle $method->getName();
    }

    
/**
     * Render the Method.
     *
     * @param string $eol
     * @param string $padding
     *
     * @return string
     */
    
public function render($eol "n"$padding '    ')
    {
        
$method $this->reflectionMethod;
        if (
$method->isPrivate() || substr($method->getName(), 02) === '__' || $method->isAbstract()) {
            return 
'';
        }
        
$rendered '';
        
$comment $method->getDocComment();
        if (
$comment !== false) {
            
$comment trim($comment);
            if (
$comment !== '') {
                
$rendered .= str_replace($eol '*'$eol ' *'implode($eolarray_map('trim'explode("n"$comment)))) . $eol;
            }
        }
        
$visibility Reflection::getModifierNames($method->getModifiers());
        
$isStatic $method->isStatic();
        if ((!
$isStatic) && $this->classSymbol->isFacade()) {
            
$visibility[] = 'static';
        }
        
$rendered .= implode(' 'array_unique($visibility)) . ' function ' $this->handle '(';
        
$params = array();
        
$calling_params = array();
        foreach (
$this->parameters as $parameter) {
            
$param '';

            if (
$parameter->isArray()) {
                
$param .= 'array ';
            } 
/*else if ($parameter->isCallable()) { // This should be enabled for php 5.4
                $param .= 'callable ';
            } */ 
else {
     try {
         if (
is_object($parameter->getClass())) {
             
$param .= $parameter->getClass()->getName() . ' ';
         }
     } catch (
ReflectionException $e) {
         
$class $this->reflectionMethod->getDeclaringClass()->getName();
         echo 
"Invalid type hint in {$class}::{$this->handle}n";
     }
 }
            if (
$parameter->isPassedByReference()) {
                
$param .= "&";
            }
            
$param .= '$' $parameter->getName();

            if (
$parameter->isOptional()) {
                
$defaultValue null;
                if (
method_exists($parameter'getDefaultValueConstantName')) {
                    
$defaultValue $parameter->getDefaultValueConstantName();
                }
                if (
$defaultValue) {
                    
// Strip out wrong namespaces.
                    
if (preg_match('/.\\(\w+)$/'$defaultValue$matches) && defined($matches[1])) {
                        
$defaultValue $matches[1];
                    }
                } else {
                    
$v $parameter->getDefaultValue();
                    switch (
gettype($v)) {
                        case 
'boolean':
                        case 
'integer':
                        case 
'double':
                        case 
'NULL':
                            
$defaultValue json_encode($v);
                            break;
                        case 
'string':
                            
$defaultValue '"' addslashes($v) . '"';
                            break;
                        case 
'array':
                            if (
count($v)) {
                                
$defaultValue trim(var_export($vtrue));
                            } else {
                                
$defaultValue 'array()';
                            }
                            break;
                        case 
'object':
                        case 
'resource':
                        default:
                            
$defaultValue trim(var_export($vtrue));
                            break;
                    }
                }
                
$param .= ' = ' $defaultValue;
            }

            
$params[] = $param;
            
$calling_params[] = '$' $parameter->getName();
        }
        
$rendered .= implode(', '$params) . "){$eol}{{$eol}";
        
$class_name $method->getDeclaringClass()->getName();
        
$rendered .= $padding 'return ';
        if (
$isStatic) {
            
$rendered .= $class_name '::' $method->getName();
        } elseif (
$this->classSymbol->isFacade()) {
            
$rendered .= 'static::$instance->' $method->getName();
        } else {
            
$rendered .= 'parent::' $method->getName();
        }
        
$rendered .= '(' implode(', '$calling_params) . ');' $eol;
        
$rendered .= '}' $eol;

        return 
$rendered;
    }
}
Онлайн: 0
Реклама