Простой ручной шаблонный движок PHP не работает!Помогите, пожалуйста - PullRequest
2 голосов
/ 27 сентября 2010

Это определения классов

<?php
  abstract class MyTemplate {

  protected $arrayOfSpaces;
  protected $arrayOfVariables;
  protected $output;

  protected abstract function __construct(); 

  function outputHTML(){
    echo $output; //Apparently, the problem is HERE. <<<<>>>>>
  }
}
  class MyTemplateMain extends MyTemplate {
   function __construct(){
     $this->output="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
             \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
             <html>
             <head>
             </head>
             <body>
             I love Rock n Roll!!!
             </body>
             </html>";
    }

  }
?>

И здесь я запускаю эту страницу

<?php 
  require_once("view/templates.php");

  $page=new MyTemplateMain();
  $page->outputHTML();



?>

Не работает, хотя.Просто показывает пустую страницу без строки «Я люблю рок-н-ролл», которая должна была появиться в теле.

Я уверен, что есть лучшие способы реализации шаблонов, но я просто хочу выяснить, почему именнопример не работает

Любая помощь приветствуется.Спасибо

PS: все кавычки должным образом экранированы и пути к файлам тоже в порядке

Ответы [ 4 ]

2 голосов
/ 27 сентября 2010

изменение:

 function outputHTML(){
    echo $output;
  }

до:

 function outputHTML(){
    echo $this->output;
  }
2 голосов
/ 27 сентября 2010

Ваш синтаксис странный, попробуйте это

  abstract class MyTemplate {

  protected $arrayOfSpaces;
  protected $arrayOfVariables;
  protected $output;

  public abstract function __construct(); 

  function outputHTML(){
    echo $this->output;
  }
}
  class MyTemplateMain extends MyTemplate {
    public function __construct(){
     $this->output="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
             \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
             <html>
             <head>
             </head>
             <body>
             I love Rock n Roll!!!
             </body>
             </html>";
    }

  }

$page=new MyTemplateMain();
$page->outputHTML();
0 голосов
/ 27 сентября 2010

Хорошо.Я не знаю почему, но сейчас это работает.Я переписывал это несколько раз, поэтому, должно быть, я все сделал правильно, хотя и непреднамеренноВот код, если кто-то хочет посмотреть и сравнить версии.Спасибо всем

abstract class MyTemplate {

protected $arrayOfSpaces;
protected $arrayOfVariables;
protected $output;


function outputHTML(){
    echo $this->output;
}

}

class MyTemplateMain extends MyTemplate {

function __construct(){
    $this->output="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
             \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
             <html>
             <head>
             </head>
             <body>
             I love Rock n Roll!!!
             </body>
             </html>";
}
}
0 голосов
/ 27 сентября 2010

Попробуйте $base->output вместо $this->output.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...