我唯一的面向对象编程经验来自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
关键字声明属性,请使用public
、private
或protected
定义其访问性。
然后,当您想从子类访问属性或方法时,只需要使用$this
关键字。例如$this->title
,$this->setTitle('title')
当您使用static
运算符将属性或方法定义为静态时,会有::
关键字。例如,如果您有public static $title
则可以使用pagebase::$title
访问
希望能澄清一些困惑。