Esempio n. 1
0
 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;
 }