将字符串打印到html页面时,PHP会将它们打印在错误的位置

时间:2015-11-27 04:30:21

标签: php oop

我有大师班,有打印网站各个部分的功能。我有一个打印master-container的函数,它是一个包含所有内容的div。 (html / body / #master-container /(所有网站元素))。在该函数内部,我有一个抽象保护函数,用于在网页(子类)上生成内容#master-container。这是大师班中代码的一部分:

  ...
  # print content
  abstract protected function print_content();

  # print master-container
  public function print_master_container(){
    $output = '
      <div id="master-container">
        '.$this->print_content().'
      </div>
    ';
    echo $output;
  }
  ...

这是子类中的代码:

class Starting_page extends Core {
        public function print_content(){
            $this->print_navbar();
            echo 'test';
        }
    }
...

现在问题是它会打印所有内容(字符串'test'和$this->print_navbar()之外的函数<div id="master-contaiener></div>打印的内容。如何修复此代码打印div内的所有内容。 屏幕截图显示了页面源代码中的问题结果。红色光标显示实际应打印的项目(以黄色标出)。

Problem screenshot

如果需要显示更多代码,请说明。

1 个答案:

答案 0 :(得分:1)

正如评论中的好人所说,问题在于使用echo代替return的具体方法。但是,当使用return时,根本就没有输出。然后@Rasclatt也为此提出了解决方案;

class Starting_page extends Core {
    public function print_content(){
        # output buffering start
        ob_start();

        # print navbar
        $this->print_navbar();

        # declare output buffering content
        $output = ob_get_contents();

        # add more output data
        $output .= 'other content';

        # end output buffering and return it
        ob_end_clean();
        return $output;
    }
}

值得注意的是$this->print_navbar()仍然使用echo来打印输出。如果使用return,则在调用此方法时应添加前缀echo