3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface TemplateInterface { } class HtmlTemplateEngine { function process(HtmlTemplate $template) { $outerTemplate = $template->getOuterTemplate(); $templateContent = $template->getTemplateContent(); if (!is_null($outerTemplate)) { $outerTemplate->setInnerTemplateContent($templateContent); return $this->process($outerTemplate); } return $templateContent; } } abstract class HtmlTemplate implements TemplateInterface { private $outerTemplate; private $innerTemplateContent; abstract public function render(); public function getTemplateContent() { ob_start(); $this->render(); return ob_get_clean(); } public function getOuterTemplate() { return $this->outerTemplate; } public function setOuterTemplate(HtmlTemplate $template) { $this->outerTemplate = $template; } public function getInnerTemplateContent() { return $this->innerTemplateContent; } public function setInnerTemplateContent($templateContent) { $this->innerTemplateContent = $templateContent; } } class MyOuterHtmlTemplate extends HtmlTemplate { public function render() { ?> <!DOCTYPE html> <html> <head> <title>Test</title> </head> <body> <h1>This is My Outer Template</h1> <article> <?= $this->getInnerTemplateContent(); ?> </article> </body> </html> <?php } } class MyInnerHtmlTemplate extends HtmlTemplate { private $name; public function render() { ?> <h1>This is My Inner Template</h1> <section> <h2>Welcome <?= $this->name; ?></h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam quis dictum urna, at gravida ipsum. In sed bibendum tortor, quis hendrerit ante. Sed auctor imperdiet pretium. Praesent metus nisi, molestie in diam et, hendrerit accumsan nibh. Sed elementum ante a adipiscing rhoncus. Nullam aliquam fringilla mi, nec iaculis diam lobortis vel. Aliquam erat volutpat. Interdum et malesuada fames ac ante ipsum primis in faucibus.</p> <p>Sed et dolor nec dui aliquam pretium. Fusce id arcu metus. Suspendisse ultrices risus vel libero iaculis cursus. Phasellus adipiscing adipiscing tincidunt. Nunc metus eros, imperdiet nec ultricies a, dictum vitae justo. Donec id turpis rhoncus, viverra magna vel, vehicula tellus. Nam in pretium dolor. In at quam volutpat velit aliquam malesuada vitae eu turpis. Nam eget blandit tellus. In rutrum massa enim. Praesent et nisl auctor, pharetra sapien in, pretium ligula. Integer quis turpis elementum mauris cursus ornare id vitae enim. Duis fermentum quis justo et rhoncus. In venenatis lorem et congue ultricies. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse vel ipsum imperdiet, vestibulum est sit amet, viverra purus.</p> </section> <?php } public function __construct($name) { $this->name = $name; $this->setOuterTemplate(new MyOuterHtmlTemplate()); } } $templateEngine = new HtmlTemplateEngine(); echo $templateEngine->process(new MyInnerHtmlTemplate('Robert Noodles'));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  (null)
number of ops:  14
compiled vars:  !0 = $templateEngine
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   20     0  E >   DECLARE_CLASS                                            'htmltemplate'
   55     1        DECLARE_CLASS                                            'myouterhtmltemplate', 'htmltemplate'
   76     2        DECLARE_CLASS                                            'myinnerhtmltemplate', 'htmltemplate'
  100     3        NEW                                              $1      'HtmlTemplateEngine'
          4        DO_FCALL                                      0          
          5        ASSIGN                                                   !0, $1
  101     6        INIT_METHOD_CALL                                         !0, 'process'
          7        NEW                                              $4      'MyInnerHtmlTemplate'
          8        SEND_VAL_EX                                              'Robert+Noodles'
          9        DO_FCALL                                      0          
         10        SEND_VAR_NO_REF_EX                                       $4
         11        DO_FCALL                                      0  $6      
         12        ECHO                                                     $6
         13      > RETURN                                                   1

Class TemplateInterface: [no user functions]
Class HtmlTemplateEngine:
Function process:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 10, Position 2 = 17
Branch analysis from position: 10
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 17
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  process
number of ops:  19
compiled vars:  !0 = $template, !1 = $outerTemplate, !2 = $templateContent
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    7     0  E >   RECV                                             !0      
    9     1        INIT_METHOD_CALL                                         !0, 'getOuterTemplate'
          2        DO_FCALL                                      0  $3      
          3        ASSIGN                                                   !1, $3
   10     4        INIT_METHOD_CALL                                         !0, 'getTemplateContent'
          5        DO_FCALL                                      0  $5      
          6        ASSIGN                                                   !2, $5
   11     7        TYPE_CHECK                                    2  ~7      !1
          8        BOOL_NOT                                         ~8      ~7
          9      > JMPZ                                                     ~8, ->17
   13    10    >   INIT_METHOD_CALL                                         !1, 'setInnerTemplateContent'
         11        SEND_VAR_EX                                              !2
         12        DO_FCALL                                      0          
   14    13        INIT_METHOD_CALL                                         'process'
         14        SEND_VAR_EX                                              !1
         15        DO_FCALL                                      0  $10     
         16      > RETURN                                                   $10
   16    17    > > RETURN                                                   !2
   17    18*     > RETURN                                                   null

End of function process

End of class HtmlTemplateEngine.

Class HtmlTemplate:
Function render:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  render
number of ops:  1
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   25     0  E > > RETURN                                                   null

End of function render

Function gettemplatecontent:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  getTemplateContent
number of ops:  8
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   29     0  E >   INIT_FCALL                                               'ob_start'
          1        DO_ICALL                                                 
   30     2        INIT_METHOD_CALL                                         'render'
          3        DO_FCALL                                      0          
   31     4        INIT_FCALL                                               'ob_get_clean'
          5        DO_ICALL                                         $2      
          6      > RETURN                                                   $2
   32     7*     > RETURN                                                   null

End of function gettemplatecontent

Function getoutertemplate:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  getOuterTemplate
number of ops:  3
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   36     0  E >   FETCH_OBJ_R                                      ~0      'outerTemplate'
          1      > RETURN                                                   ~0
   37     2*     > RETURN                                                   null

End of function getoutertemplate

Function setoutertemplate:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  setOuterTemplate
number of ops:  4
compiled vars:  !0 = $template
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   39     0  E >   RECV                                             !0      
   41     1        ASSIGN_OBJ                                               'outerTemplate'
          2        OP_DATA                                                  !0
   42     3      > RETURN                                                   null

End of function setoutertemplate

Function getinnertemplatecontent:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  getInnerTemplateContent
number of ops:  3
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   46     0  E >   FETCH_OBJ_R                                      ~0      'innerTemplateContent'
          1      > RETURN                                                   ~0
   47     2*     > RETURN                                                   null

End of function getinnertemplatecontent

Function setinnertemplatecontent:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  setInnerTemplateContent
number of ops:  4
compiled vars:  !0 = $templateContent
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   49     0  E >   RECV                                             !0      
   51     1        ASSIGN_OBJ                                               'innerTemplateContent'
          2        OP_DATA                                                  !0
   52     3      > RETURN                                                   null

End of function setinnertemplatecontent

End of class HtmlTemplate.

Class MyOuterHtmlTemplate:
Function render:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  render
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   60     0  E >   ECHO                                                     '++++++++%3C%21DOCTYPE+html%3E%0A++++++++%3Chtml%3E%0A++++++++++++%3Chead%3E%0A++++++++++++++++%3Ctitle%3ETest%3C%2Ftitle%3E%0A++++++++++++%3C%2Fhead%3E%0A++++++++++++%3Cbody%3E%0A++++++++++++++++%3Ch1%3EThis+is+My+Outer+Template%3C%2Fh1%3E%0A++++++++++++++++%3Carticle%3E%0A++++++++++++++++++++'
   68     1        INIT_METHOD_CALL                                         'getInnerTemplateContent'
          2        DO_FCALL                                      0  $0      
          3        ECHO                                                     $0
   69     4        ECHO                                                     '++++++++++++++++%3C%2Farticle%3E%0A++++++++++++%3C%2Fbody%3E%0A++++++++%3C%2Fhtml%3E%0A++++++++'
   73     5      > RETURN                                                   null

End of function render

End of class MyOuterHtmlTemplate.

Class MyInnerHtmlTemplate:
Function render:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  render
number of ops:  5
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   83     0  E >   ECHO                                                     '++++++++%3Ch1%3EThis+is+My+Inner+Template%3C%2Fh1%3E%0A++++++++%3Csection%3E%0A++++++++++++%3Ch2%3EWelcome+'
   85     1        FETCH_OBJ_R                                      ~0      'name'
          2        ECHO                                                     ~0
          3        ECHO                                                     '%3C%2Fh2%3E%0A++++++++++++%3Cp%3ELorem+ipsum+dolor+sit+amet%2C+consectetur+adipiscing+elit.+Aliquam+quis+dictum+urna%2C+at+gravida+ipsum.+In+sed+bibendum+tortor%2C+quis+hendrerit+ante.+Sed+auctor+imperdiet+pretium.+Praesent+metus+nisi%2C+molestie+in+diam+et%2C+hendrerit+accumsan+nibh.+Sed+elementum+ante+a+adipiscing+rhoncus.+Nullam+aliquam+fringilla+mi%2C+nec+iaculis+diam+lobortis+vel.+Aliquam+erat+volutpat.+Interdum+et+malesuada+fames+ac+ante+ipsum+primis+in+faucibus.%3C%2Fp%3E%0A++++++++++++%3Cp%3ESed+et+dolor+nec+dui+aliquam+pretium.+Fusce+id+arcu+metus.+Suspendisse+ultrices+risus+vel+libero+iaculis+cursus.+Phasellus+adipiscing+adipiscing+tincidunt.+Nunc+metus+eros%2C+imperdiet+nec+ultricies+a%2C+dictum+vitae+justo.+Donec+id+turpis+rhoncus%2C+viverra+magna+vel%2C+vehicula+tellus.+Nam+in+pretium+dolor.+In+at+quam+volutpat+velit+aliquam+malesuada+vitae+eu+turpis.+Nam+eget+blandit+tellus.+In+rutrum+massa+enim.+Praesent+et+nisl+auctor%2C+pharetra+sapien+in%2C+pretium+ligula.+Integer+quis+turpis+elementum+mauris+cursus+ornare+id+vitae+enim.+Duis+fermentum+quis+justo+et+rhoncus.+In+venenatis+lorem+et+congue+ultricies.+Cum+sociis+natoque+penatibus+et+magnis+dis+parturient+montes%2C+nascetur+ridiculus+mus.+Suspendisse+vel+ipsum+imperdiet%2C+vestibulum+est+sit+amet%2C+viverra+purus.%3C%2Fp%3E%0A++++++++%3C%2Fsection%3E%0A++++++++'
   90     4      > RETURN                                                   null

End of function render

Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/RlACG
function name:  __construct
number of ops:  9
compiled vars:  !0 = $name
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   92     0  E >   RECV                                             !0      
   94     1        ASSIGN_OBJ                                               'name'
          2        OP_DATA                                                  !0
   95     3        INIT_METHOD_CALL                                         'setOuterTemplate'
          4        NEW                                              $2      'MyOuterHtmlTemplate'
          5        DO_FCALL                                      0          
          6        SEND_VAR_NO_REF_EX                                       $2
          7        DO_FCALL                                      0          
   96     8      > RETURN                                                   null

End of function __construct

End of class MyInnerHtmlTemplate.

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
170.59 ms | 1412 KiB | 17 Q