我唯一的面向对象编程经验来自C,所以php给了我一些曲线球,我需要一些帮助。
我有一个用于我所有页面的类,如果你愿意的话,是“pagebase”。它处理最低级别的html结构。该类由其他几个类继承。这些类是网站具有的不同页面类型。现在:我在从继承它的类的实例中设置“pagebase”中的变量时遇到问题。在C语言中,当类实例的行为类似于继承的类时,这是没有问题的。
这代表了我所拥有的:
pagebase.php页面库

<?php
    class pagebase
    {
        var $title = "No title";
        var $body = "<center>No content</center>";

        function setTitle($value) {
            $this->title = $value;
        }

        function setBody($value) {
            $this->title = $value;
        }

        function updateHTML()
        {
            ...
        }

        function drawPage()
        {
            $this->updateHTML();
            echo $this->html;
        }
    }
?>

标准页.php
<?php
    include("includes/pagebase.php");

    class std_page extends pagebase
    {
        function std_page()
        {
            ...
        }

        function updateHTML()
        {
            parent::setBody(
                "
                    <div id=\"main_wrapper\">
                        The page goes here!
                    </div>
                "
            );
        }

        function drawPage()
        {
            $this->updateHTML();
            parent::drawPage();
        }
    }
?>

index.php索引
<?php
    include "includes/std_page.php";

    $page = new std_page;
    $page->setTitle("Avesta");

    $page->drawPage();
?>

除此之外,最大的问题是什么都不管用。pagebase中的值不会更改,即使我没有得到任何错误指示函数未找到或以任何形状、方式或形式运行。
有人请告诉我我做错了什么-谢谢

最佳答案

首先,不要使用var关键字声明属性,请使用publicprivateprotected定义其访问性。
然后,当您想从子类访问属性或方法时,只需要使用$this关键字。例如$this->title$this->setTitle('title')
当您使用static运算符将属性或方法定义为静态时,会有::关键字。例如,如果您有public static $title则可以使用pagebase::$title访问
希望能澄清一些困惑。

09-07 02:41