Как мне получить доступ к этим переменным класса PHP? - PullRequest
0 голосов
/ 29 января 2010

У меня есть два 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 Ответ

2 голосов
/ 29 января 2010

Чтобы получить доступ к членам объекта, используйте -> с вложенными объектами несколько раз. Итак: в тесте ():

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';
 ...

вы не сможете получить доступ к переменным из другого объекта.

Это отвечает на ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...