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

implementing() публичный Метод

Tells the class we're defining to implement interfaces, creating it if it does not exist.
public implementing ( string $interface ) : Mime
$interface string The interface to implement
Результат Mime The mime for method chaining
    public function implementing($interface)
    {
        foreach (func_get_args() as $interface) {
            $file = str_replace('\\', self::DS, $interface) . '.php';
            $path = implode(self::DS, [__DIR__, self::INTERFACE_EXTENSIONS_DIR, $file]);
            if (isset(self::$registry[$interface]) || file_exists($path)) {
                if (!isset(self::$registry[$interface])) {
                    $existing_traits = get_declared_traits();
                    $extension = (include $path);
                    self::$extensions = array_merge(self::$extensions, $extension);
                    self::$registry[$interface] = array_diff(get_declared_traits(), $existing_traits);
                    return $this->implementing($interface);
                } else {
                    foreach (self::$registry[$interface] as $trait) {
                        $this->using($trait);
                    }
                }
            }
            //
            // We want to create the interface if it doesn't exist yet.  We don't want to
            // qualify the namespace until below.
            //
            if (!interface_exists($interface)) {
                $fqin = ltrim($interface, '\\');
                $parts = explode('\\', $fqin);
                $interface = array_pop($parts);
                $ns = implode('\\', $parts);
                eval(call_user_func(function () use($ns, $interface) {
                    ob_start();
                    ?>
							namespace <?php 
                    echo $ns;
                    ?>
							{
								interface <?php 
                    echo $interface;
                    ?>
 {}
							}
						<?php 
                    return ob_get_clean();
                }));
            }
            self::$interfaces[$this->class][] = self::qualify($ns . '\\' . $interface);
        }
        return $this;
    }