代码之家  ›  专栏  ›  技术社区  ›  Anders

如何访问这些PHP类变量?

  •  0
  • Anders  · 技术社区  · 15 年前

    我有两个PHP文件,一个管理数据库连接,另一个从数据库中检索数据。我从零开始写这篇文章,作为一种学习体验,并且假定它是早上5点,但是出于某种原因,我不能访问我需要访问的变量。

    我的数据库连接文件如下:

    <?
    
    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对象中的变量?

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  2
  •   Pekka    15 年前

    要访问对象的成员,请使用 -> ,使用嵌套对象,多次。所以:在测试()中:

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

    您可以这样做,因为变量是用 var 使它们隐式地公开。如果你申报的话 private protected 像这样:

    class mysqlManager
    {
    
     private $dbhost = 'xxx.xxx.xxx.xxx';
     protected $dbuser = 'xxx';
     ...
    

    您将无法从另一个对象访问变量。

    那能回答你的问题吗?