Dotink\Parody\Mime::make PHP Метод

make() приватный статический Метод

Literally makes (evals) a class.
private static make ( string $class ) : string
$class string The class to make
Результат string The qualfied class
    private static function make($class)
    {
        //
        // Trim out our leading namespace separator to get a root relative full qualified
        // class name.
        //
        $fqcn = ltrim($class, '\\');
        $class = self::qualify($class);
        //
        // Determine the appropriate parent
        //
        $parent = !isset(self::$parents[$fqcn]) ? self::qualify(__NAMESPACE__ . '\\Quip') : self::$parents[$fqcn];
        //
        // Collect interfaces
        //
        $interfaces = isset(self::$interfaces[$class]) ? self::$interfaces[$class] : array();
        //
        // Collect traits
        //
        $traits = isset(self::$traits[$class]) ? self::$traits[$class] : array();
        //
        // Break out our namespace and class
        //
        $parts = explode('\\', $fqcn);
        $class = array_pop($parts);
        $ns = implode('\\', $parts);
        if (!class_exists($parent, FALSE)) {
            return self::make($parent);
        }
        //
        // Create a class
        //
        eval(call_user_func(function () use($ns, $class, $parent, $interfaces, $traits) {
            ob_start();
            ?>
					namespace <?php 
            echo $ns;
            ?>
					{
						class <?php 
            echo $class;
            ?>

						<?php 
            if ($parent) {
                ?>
							extends <?php 
                echo $parent;
                ?>
						<?php 
            }
            ?>

						<?php 
            if (count($interfaces)) {
                ?>
							implements <?php 
                echo implode(', ', $interfaces);
                ?>
						<?php 
            }
            ?>

						{

						<?php 
            foreach ($traits as $trait) {
                ?>
							use <?php 
                echo $trait;
                ?>
;
						<?php 
            }
            ?>

						}
					}
				<?php 
            return ob_get_clean();
        }));
    }