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

namespace ConcreteCoreSupportSymbolClassSymbol;

use 
ConcreteCoreSupportSymbolClassSymbolMethodSymbolMethodSymbol;
use 
ReflectionClass;

class 
ClassSymbol
{
    
/**
     * Fully qualified class name.
     *
     * @var string
     */
    
protected $fqn;

    
/**
     * If the class is a facade, here we have the facade ReflectionClass, otherwise it's null.
     *
     * @var ReflectionClass|null
     */
    
protected $facade;

    
/**
     * Class alias.
     *
     * @var string
     */
    
protected $alias;

    
/**
     * Array of MethodSymbols.
     *
     * @var MethodSymbol[]
     */
    
protected $methods = array();

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

    
/**
     * The ReflectionClass instance.
     *
     * @var ReflectionClass
     */
    
protected $reflectionClass;

    
/**
     * @param $alias  string Class Alias
     * @param $fqn    string Fully qualified Class name
     * @param $facade bool Is this a facade
     */
    
public function __construct($alias$fqn$facade null)
    {
        
$this->reflectionClass = new ReflectionClass($fqn);
        
$this->fqn $fqn;
        
$this->alias $alias;
        
$this->comment $this->reflectionClass->getDocComment();

        if (
            
$facade === true
            
||
            (
                
$facade !== false
                
&&
                (
                    
$this->reflectionClass->isSubclassOf('ConcreteCoreSupportFacadeFacade')
                    ||
                    
$this->reflectionClass->isSubclassOf('IlluminateSupportFacadesFacade')
                )
            )
        ) {
            
$obj $fqn::getFacadeRoot();

            
$this->facade $this->reflectionClass;
            
$this->reflectionClass = new ReflectionClass($obj);
            
$this->fqn $this->reflectionClass->getName();
        } else {
            
$this->facade null;
        }

        
$this->resolveMethods();
    }

    
/**
     * Get the methods.
     */
    
protected function resolveMethods()
    {
        
$methods $this->reflectionClass->getMethods();
        if (
$this->isFacade()) {
            
$methods array_merge($methods$this->getFacadeReflectionClass()->getMethods());
        }
        foreach (
$methods as $method) {
            
$this->methods[] = new MethodSymbol($this$method);
        }
    }

    
/**
     * @return bool
     */
    
public function isFacade()
    {
        return isset(
$this->facade);
    }

    
/**
     * @return ReflectionClass|null
     */
    
public function getFacadeReflectionClass()
    {
        return 
$this->facade;
    }

    
/**
     * Render Class with methods.
     *
     * @param string $eol
     * @param string $padding
     * @param callable|null $methodFilter
     *
     * @return string
     */
    
public function render($eol "n"$padding '    '$methodFilter null)
    {
        
$rendered '';
        
$comment $this->comment;
        if (
$comment !== false) {
            
$comment trim($comment);
            if (
$comment !== '') {
                
$rendered .= str_replace($eol '*'$eol ' *'implode($eolarray_map('trim'explode("n"$comment)))) . $eol;
            }
        }
        
$rendered .= 'class ' $this->alias ' extends ' $this->fqn "{$eol}{{$eol}";
        
$firstMethod true;
        foreach (
$this->methods as $method) {
            if (
is_callable($methodFilter) && (call_user_func($methodFilter$this$method) === false)) {
                continue;
            }
            if (
$firstMethod) {
                
$firstMethod false;
                if (
$this->isFacade()) {
                    
$rendered .= $padding '/**' $eol $padding ' * @var ' $this->fqn $eol $padding ' */' $eol;
                    
$rendered .= $padding 'protected static $instance;' $eol;
                }
            }
            
$rendered_method $method->render($eol$padding);
            if (
$rendered_method !== '') {
                
$rendered .= $padding rtrim(str_replace($eol$eol $padding$rendered_method)) . $eol;
            }
        }
        
$rendered .= "}{$eol}";

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