你会认为这是一个愚蠢的类文件使用?

时间:2011-09-15 16:36:44

标签: php oop

我有这门课,我想知道,你认为这是浪费吗?我应该这样做吗?我理解课堂的工作方式以及是什么让他们变得好,但是我(在网站的角度来看)失败了解他们的用途。

<? 
class PageHandler {
    var $html;
    function header () {
        $this->html .= "<html>
            <head>
                <title>Nuclear Summer</title>
            </head>
        <body>";
    }
    function footer () {
        $this->html .= "
            </body>
            </html>
            ";
    }
    function input ($html) {
        $this->html .= $html;
    }
    function output () {
        echo $this->html;
    }
}
?>

4 个答案:

答案 0 :(得分:1)

您的PageHandler在PHP框架方面类似于“视图”类。您可以为页面实例化它并为其提供更多功能。你正在重用页眉和页脚,所以这通常是一个godd想法。

但你的例子很简单,可以多说一点。

答案 1 :(得分:1)

这是一个很糟糕的使用。您正在使用的课程是您应该使用 views (如果您要采用MVC方法,这是一个很好的方法)。

您创建一个主layout视图,其中包含所有页面共有的代码(例如页眉,页脚),然后您将传入的请求路由到适当的控制器,该控制器使用适当的布局填充布局的“中间”内容。

CodeIgniter是一个很好的PHP框架,可以帮助您掌握MVC。它甚至有documentation on it

答案 2 :(得分:1)

这是php4的例子,对于php5来说并不常见,这也不是创建输出模板的类的最佳用法,尝试探索Zend Framework它是PHP的{OOP和MVC的好例子http://framework.zend.com/manual/en/ < / p>

php5的代码示例,但仍不是OOP的最佳用法

class PageHandler {

    private $html;

    private function header () {
        $this->html .= "<html>
            <head>
                <title>Nuclear Summer</title>
            </head>
        <body>";
    }
    private function footer () {
        $this->html .= "
            </body>
            </html>
            ";
    }
    public function input ($html) {
        $this->html .= $html;
    }
    public function output () {
        $this->html = $this->header() . $this->html . $this->footer();
       return $this->html;
    }
}

$page = new PageHandler();
$page->input('some content');
echo $page->output();

答案 3 :(得分:0)

使用类作为文档构造函数并不是不同寻常的,但我建议对您的类进行一些修改,使其在您的方法中更加有意。看看下面的例子,了解如何class一点点(lolz)的一些想法。请记住 - 在处理文档输出时,您的constructoroutput buffer都可以成为好朋友。

<?php

class PageHandler
{

    private $html;

    function __construct()
    {
        $this->html = $this->getHeader();
    }

    private function getHeader()
    {

        ob_start();
?>
<html>
    <head>
        <title>Nuclear Summer</title>
    </head>
    <body>
<?php
        return ob_get_clean();

    }

    private function getFooter()
    {

        ob_start();
?>
    </body>
</html>
<?php
        return ob_get_clean();

    }

    function setBody($html)
    {
        $this->html .= $html;
    }

    function getDocument()
    {
        return $this->html . $this->getFooter();
    }

}

?>