【发布时间】:2010-09-04 20:02:59
【问题描述】:
我唯一的面向对象编程经验来自 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;
}
}
?>
std_page.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();
?>
除其他外,这里最大的问题是没有任何作用。即使我没有收到任何错误指示该函数未找到或以任何形状、方式或形式运行,页面库中的值也不会更改。
请告诉我我做错了什么 - 谢谢
【问题讨论】:
-
我很困惑,你已经在使用
parent::setBody。你为什么不使用parent::setTitle?您使用“旧式”PHP4 类定义有什么特别的原因吗?您是否注意到setBody中出现复制和粘贴错误? -
您是通过 PHP 生成整个 HTML,然后回显或返回吗?我们最近在我们的项目中放弃了这种做法,因为它会导致许多困难 - 无法在 Dreamweaver 等代码编辑器中看到页面的布局视图,编辑器的 html 标记完成建议不起作用等。
标签: php inheritance function oop instance