在电脑里......好的,这是我的问题。
我正在创建一个将回显XML文档的PHP对象。我将日期/时间戳作为默认值。我开始使用构造函数来生成时间戳。
我遇到的障碍是如何使用不同的方法来访问在构造函数中创建的XML文档。我正在努力扩展我对OOP的了解,以便在正确的方向上轻推一下。
<?php //XML DOM OBJECT CREATOR 9000
// Create new DOM object
$dom = new Xmlstuff;
$dom->generateError('This is the error');
$dom->addtime();
$dom->generateXML();
class Xmlstuff extends DOMDocument{
//Constructor
public function __construct(){
//Calling constructor of DOMDocument
parent::__construct('1.0','utf-8');
} //End of constructor
function generateError($errorMsg){
//Generate standard response
//Root Node
$rootNode= $this->createElement('root','');
$this->appendChild($rootNode);
//status Node
$statusNode=$this->createElement('status',' ');
$rootNode->appendChild($statusNode);
//Error Message
$errorElement=$this->createElement('error' ,$errorMsg);
$statusNode->appendChild($errorElement);
//date
$dateElement=$this->createElement('date', date("d/m/Y"));
$statusNode->appendChild($dateElement);
//time
//$timeElement=$this->createElement('time', date("H:i:s").' PST');
//$statusNode->appendChild($timeElement);
}
function addtime(){
//time
$timeElement=$this->createElement('time', date("H:i:s").' PST');
$statusNode->appendChild($timeElement);
}
//Function to display generated XML document
function generateXML(){
header('Content-Type: text/xml');
echo $this->saveXML();
}
} //End of Class
?>
答案 0 :(得分:2)
您正在扩展DOMDocument,因此您想要访问的DOMDocument上的任何内容都可通过$ this / self Xmlstuff访问“是一个”DOMDocument
Xmlstuff是DOMDocument的扩展。因此,DOMDocument包含的任何行为或数据,您的新类Xmlstuff也包含。
对parent::__construct();
的调用只是说,在我完成Xmlstuff类的特定初始化之后,执行DOMDocument所需的所有初始化。
在DOMDocument类中声明为public或protected的任何数据/函数都将由Xmlstuff类继承。
进一步查看代码,addtime函数无权访问$ statusNode,如果要访问它(在generateError中创建的$ statusNode),则需要将其设置为成员变量。 $this->statusNode
。
function addtime(){
//time
$timeElement=$this->createElement('time', date("H:i:s").' PST');
$this->statusNode->appendChild($timeElement);
}
注意:您还必须在generateError函数中创建它。
此外,为了让您的代码更整洁,您应该在构造函数中初始化$ this-&gt; statusNode。作为一个类的原因应该隐藏它的实现细节(它应该是任何想要使用它的人的黑盒子)。如果有人在致电addTime()
之前调用了函数generateError()
,则尚未创建$this->statusNode
。
即。将此行添加到构造函数中:
$this->statusNode = $this->createElement('status', ' ');
从generateError()
$statusNode=$this->createElement('status',' ');
与
$statusNode = $this->statusNode;
答案 1 :(得分:0)
不确定我是否正确阅读,但这是你想要的吗?如何访问方法创建的值...在类之外(可能来自不同的类)?
$dom = new Xmlstuff;
$dom->setValue('Test');
echo $dom->xmlDocument;
class Xmlstuff extends DOMDocument{
public $xmlDocument = "Initial Value";
function setValue($val){
$this->xmlDocument = $val;
}
}