private function parse_import() { if (preg_match_all($this->_patten_import, $this->content, $matchs, PREG_SET_ORDER)) { foreach ($matchs as $match) { $name = $match[1]; $as = $match[2]; $config = $this->engine ? $this->engine->config() : []; $engine = $this->engine; $ve = new ViewEngine($config); $body = $ve->fetch($name, false); $macros = ViewParser::import($body); //var_dump($macros); //json_decode(json_encode(self::$macros), true); $obj = new ViewMacro(); $self =& $this; foreach ($macros as $key => $val) { $obj->{$key} = function () use($val) { $args = combine_arr(array_keys($val[0]), func_get_args()[0]); $args = array_merge($val[0], $args); $body = $this->parse($val[1]); ob_start() and ob_clean(); extract($args, EXTR_OVERWRITE); try { eval('?>' . $body); } catch (\Exception $e) { ob_end_clean(); throw $e; } $body = ob_get_clean(); //echo "\r\n|".$body."|\r\n"; return $body; }; } if ($engine) { $engine->{$as} = $obj; } } $this->content = preg_replace($this->_patten_import, '', $this->content); } return $this->content; }