2011-02-14 142 views
1

在計算機內......好的,這是我的問題。PHP-訪問變量在另一個對象內創建的變量

我正在創建一個PHP對象,它會回顯出一個XML文檔。我將默認日期/時間戳記作爲默認值。我開始使用構造函數來生成時間戳。

我碰到的障礙是如何使用不同的方法來訪問在構造函數中創建的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

澄清你的意思「不同的方法來訪問XML文檔」什麼 – simshaun 2011-02-15 00:06:10

+0

哎呀,我想我貼錯code..Anyways。我使用generateError()來創建一個XML文檔。我使用addtime()來添加XML文檔的時間節點。我試圖找出如何正確的範圍。如果我使用addtime()會引發錯誤。我假設由於生成錯誤內的變量在類之間不可見。 – BaseBand 2011-02-15 00:11:15

+0

看到我關於使用`$ this`的回答# – Jacob 2011-02-15 00:16:15

回答

2

你是在擴展DOM文檔,等等DOM文檔要訪問任何事情都是通過這個$訪問/自Xmlstuff「是」的DOMDocument

Xmlstuff是DOM文檔的擴展。因此,任何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-> statusNode。作爲一個類的原因應該隱藏它的實現細節(對於任何想要使用它的人來說,它應該是一個黑盒子)。如果有人在致電generateError()之前調用函數addTime(),那麼$this->statusNode將不會被創建。

即該行添加到您的構造函數:

$this->statusNode = $this->createElement('status', ' '); 

generateError()

$statusNode=$this->createElement('status',' '); 

$statusNode = $this->statusNode; 
0

不知道更換此行,如果我沒有理解錯的,但是這是你想要什麼?如何訪問由該方法創建的值...在類之外(也許從不同的類)?

$dom = new Xmlstuff; 
$dom->setValue('Test'); 
echo $dom->xmlDocument; 

class Xmlstuff extends DOMDocument{ 

    public $xmlDocument = "Initial Value"; 

    function setValue($val){ 
     $this->xmlDocument = $val; 
    } 
}