PHP-访问在对象内的另一个方法中创建的变量

时间:2011-02-14 23:59:53

标签: php oop

在电脑里......好的,这是我的问题。

我正在创建一个将回显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


?>

2 个答案:

答案 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;
    }
}