Kahlan\Plugin\Double::generate PHP Method

generate() public static method

Creates a class definition.
public static generate ( array $options = [] ) : string
$options array Array of options. Options are: - `'class'` _string_ : the fully-namespaced class name. - `'extends'` _string_ : the fully-namespaced parent class name. - `'implements'` _array_ : the implemented interfaces. - `'uses'` _array_ : the used traits. - `'methods'` _array_ : the methods to stubs. - `'layer'` _boolean_: indicate if public methods should be layered.
return string The generated class string content.
    public static function generate($options = [])
    {
        $defaults = ['class' => 'Kahlan\\Spec\\Plugin\\Double\\Double' . static::$_index++, 'extends' => '', 'implements' => [], 'uses' => [], 'methods' => [], 'layer' => null, 'openTag' => true, 'closeTag' => true];
        $options += $defaults;
        if ($options['extends']) {
            $options += ['magicMethods' => false];
        } else {
            $options += ['magicMethods' => true];
        }
        $class = $options['class'];
        $namespace = '';
        if (($pos = strrpos($class, '\\')) !== false) {
            $namespace = substr($class, 0, $pos);
            $class = substr($class, $pos + 1);
        }
        if ($namespace) {
            $namespace = "namespace {$namespace};\n";
        }
        $uses = static::_generateUses($options['uses']);
        $extends = static::_generateExtends($options['extends']);
        $implements = static::_generateImplements($options['implements']);
        $methods = static::_generateMethodStubs($options['methods'], $options['magicMethods']);
        if ($options['extends']) {
            $methods += static::_generateClassMethods($options['extends'], $options['layer']);
        }
        $methods += static::_generateInterfaceMethods($options['implements']);
        $methods = $methods ? '    ' . join("\n    ", $methods) : '';
        $openTag = $options['openTag'] ? "<?php\n" : '';
        $closeTag = $options['closeTag'] ? "?>" : '';
        return $openTag . $namespace . <<<EOT

class {$class}{$extends}{$implements} {

{$uses}{$methods}

}
{$closeTag}
EOT;
    }

Usage Example

示例#1
0
 /**
  * Helper for `Layer::process()`.
  *
  * @param array $parent The node instance tor process.
  */
 protected function _processTree($parent)
 {
     foreach ($parent->tree as $node) {
         if ($node->processable && $node->type === 'class' && $node->extends) {
             $namespace = $node->namespace->name . '\\';
             $parent = $node->extends;
             $extends = ltrim($parent[0] === '\\' ? $parent : $namespace . $parent, '\\');
             if (!isset($this->_override[$extends])) {
                 continue;
             }
             $layerClass = $node->name . $this->_suffix;
             $node->extends = $layerClass;
             $pattern = preg_quote($parent);
             $node->body = preg_replace("~(extends\\s+){$pattern}~", "\\1{$layerClass}", $node->body);
             $code = Double::generate(['class' => $layerClass, 'extends' => $extends, 'openTag' => false, 'closeTag' => false, 'layer' => true]);
             $parser = $this->_classes['parser'];
             $root = $parser::parse($code, ['php' => true]);
             $node->close .= str_replace("\n", '', $parser::unparse($this->_pointcut->process($root)));
         } elseif (count($node->tree)) {
             $this->_processTree($node);
         }
     }
 }
All Usage Examples Of Kahlan\Plugin\Double::generate