2010-01-29 69 views
0

我有兩個php文件,一個管理數據庫連接,另一個從數據庫中檢索數據。我從零開始寫這個作爲一個學習經驗,並且授予它早上5點,但由於某種原因,我無法訪問我需要的變量。如何訪問這些PHP類變量?

我的數據庫連接文件如下:

<? 

class mysqlManager { 
    var $dbhost = 'xxx.xxx.xxx.xxx'; 
    var $dbuser = 'xxx'; 
    var $dbpass = 'xxx'; 
    var $dbname = 'xxx'; 

    var $connection; 
    var $errorCode; 
    var $errorMsg; 

    public function __construct($host='',$user='',$pass='',$name='') { 
     if(!$host=='') $this->dbhost = $host; 
     if(!$user=='') $this->dbuser = $user; 
     if(!$pass=='') $this->dbpass = $pass; 
     if(!$name=='') $this->dbname = $name; 
    } 

    function openConnection($host,$user,$pass) { 
     if(!$this->connection = @mysql_connect($host,$user,$pass,true)) { 
      $this->errorCode = mysql_errno(); 
      $this->errorMsg = mysql_error(); 
      return false; 
     } 
     return true; 
    } 

    function closeConnection() { 
     if($this->connection){ 
      @mysql_close($this->connection); 
     } 
    } 

    function selectDB($name) { 
     if(!$this->openConnection($this->dbhost,$this->dbuser,$this->dbpass)){ 
      return false; 
     }else{ 
      return @mysql_select_db($name); 
     } 
    } 
} 

?> 

獲取數據的下一個文件如下:

<? 

class ccp { 
    var $mgr; 

    public function __construct() { 
     $this->mgr = new mysqlManager(); 
    } 

    public function test() { 
     print_r($this->mgr); 
    } 

    function getCCP() { 
     if($mgr->openConnection($mgr->dbhost,$mgr->dbuser,$mgr->dbpass)) { 
      if(!$mgr->selectDB($mgr->dbname)) { 
       $mgr->closeConnection(); 
       return 'An error has occured while processing your request.'; 
      } 
      $q = 'SELECT * FROM ccp WHERE cat="ccp" ORDER BY date DESC'; 
      $r = @mysql_query($q); 
      $ret=''; 
      while($row = @mysql_fetch_array($r)){ 
       $ret = '<div class="post">'; 
       $ret .= ' <h2 class="title">'.$row["title"].'</h2>'; 
       $ret .= ' <p class="date">'.$row["date"].'</p>'; 
       $ret .= ' <div class="entry">'.$row["body"].'</div>'; 
       $ret .= '</div>'; 
      } 
      $mgr->closeConnection(); 
      return $ret; 
     } 
    } 
} 

?> 

當我運行測試功能,我得到這個:

mysqlManager Object ([dbhost] => xxx.xxx.xxx.xxx [dbuser] => xxx [dbpass] => xxx [dbname] => xxx [connection] => [errorCode] => [errorMsg] =>) 

如何訪問mysqlManager對象中的變量?

謝謝!

回答

2

要訪問對象的成員,請多次使用帶有嵌套對象的->。所以:在試驗(+):

echo $this->mgr->dbhost; // echoes xxx.xx.xxx.xxx 
echo $this->mgr->dbpass; // echoes xxx 

你可以做到這一點,因爲變量使用var聲明,使他們含蓄地公開。如果你有privateprotected像這樣聲明它們:

class mysqlManager 
{ 

private $dbhost = 'xxx.xxx.xxx.xxx'; 
protected $dbuser = 'xxx'; 
... 

你將不能夠從另一個對象訪問的變量。

這是否回答你的問題?

+0

大聲笑。是的。我責怪疲倦!感謝的人:D – Anders 2010-01-29 10:08:21

+0

不客氣! – 2010-01-29 10:09:46