[英]How do i access a class instance's parent in PHP?
我唯一面向對象的編程經驗來自C#,所以PHP給我一些曲線球,我可以使用一些幫助。
我有一個我用於所有頁面的課程,如果你願意,我會使用“頁面庫”。 它處理最低級別的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();
?>
現在除此之外,這里最大的問題是沒有工作。 頁面庫中的值不會更改,即使我沒有收到任何錯誤,表明找不到該功能或以任何形狀,方式或形式運行。
有人請告訴我我做錯了什么 - 謝謝
首先,不要使用var
關鍵字聲明屬性,請使用public
, private
或protected
定義其accesibilty。
然后,當您想要從子類訪問屬性或方法時,您只需要使用$this
關鍵字。 例如$this->title
, $this->setTitle('title')
當您將屬性或方法定義為靜態時,使用::
運算符調用它時,會有static
關鍵字。 例如,如果你有public static $title
那么你可以使用pagebase::$title
訪問它
希望它清楚一些混亂。
這是parent
在靜態范圍內工作的情況,這就是你使用::
運算符的原因。
如果它是繼承,只需嘗試$this->setBody
。
我做了一些更改,以使代碼運行並修復一些問題。 它仍然不理想,但它應該工作並具有指導性......
abstract class pagebase
{
private $title = 'No title';
private $body = 'No content';
public function setTitle($value) {
$this->title = $value;
}
public function setBody($value) {
$this->body = $value;
}
public function drawPage()
{
$this->updateHTML();
echo $this->body;
}
abstract protected function updateHTML();
}
class std_page extends pagebase
{
protected function updateHTML()
{
$this->setBody(
"
<div id=\"main_wrapper\">
The page goes here!
</div>
"
);
}
}
以下是更改:
pagebase
摘要 , updateHTML
是一個抽象方法。 這是沒有意義的呈現pagebase
,和特定的子類表示個性的方法是通過創建它自己的版本updateHTML
方法。 std_page
private
,這意味着外部代碼(包括像std_page
這樣的子類)無法修改或讀取它們。 如果子類需要訪問權限,則可以使用protected
。 可從任何地方訪問的這些方法都是public
請參閱手冊中的可見性 。 parent::
。 只有當孩子有自己的實現覆蓋父母,但你想明確地調用父版本時,才需要這樣做。 如果父方法做了一些實際工作,並且孩子想要構建它,這可能會有所幫助。 請參閱本手冊條目中的示例編號3。 drawPage
工作方式,則無需重新定義該方法。 由於您正在重載updateHTML
,因此該重載版本會自動在drawPage
的現有實現中drawPage
。 setBody
方法實際上設置了你的title
,你在一些地方使用$html
,大概你的意思是$body
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.