PHP变量在范围问题中丢失

时间:2013-09-28 18:06:19

标签: php database-connection

简单的数据访问层程序。 我有一个类,其中有一些受保护的变量用于用户名密码等。 我有一个函数读取INI文件并填充这些受保护的变量。像这样

class SqlAdapter
{
    protected $_connection

    protected $_username
    protected $_passwprd
    protected $_hostname

    public function __construct()
    {
        $params = parse_ini_file(__file__, 1);
        $this->_username = $params[...][...];
        ...
        ...
        [where the problem comes in]
        $this->_connection = mysqli_connect($this_hostname, ..., ...);
    }

    public function fectchMyStuff()
    {
        $result array()
        $query = mysqli_query($connection, $query, MYSQLI_STORE_RESULT);

        while($row = mysqli_fetch_assoc($query))
        {
             $result[] = $row;
        }

        return json_encode($result);
    }

现在,当我在函数中运行连接东西时它工作得很好......但是为什么在实例化构造函数之后,受保护变量“保持不变”?我做错了吗?

有什么建议吗?重点是,我不想每次编写一个访问我的数据库的函数时都要重写那个连接字符串......有点破坏了可重用代码和封装的目的,好吧,OOP都在一起!

感谢

2 个答案:

答案 0 :(得分:0)

我认为您的__construct功能没问题,但fectchMyStuff中的某些内容似乎不对:

public function fectchMyStuff()
{
    $result array()
    // $query = mysqli_query($connection, $query, MYSQLI_STORE_RESULT);
    // should use $this->_connection
    $query = mysqli_query($this->_connection, $query, MYSQLI_STORE_RESULT);


    while($row = mysqli_fetch_assoc($query))
    {
         $result[] = $row;
    }

    return json_encode($result);
}

更新

 $this->_connection = mysqli_connect($this_hostname, ..., ...);

$this_hostname,您的意思是$this->_hostname;

答案 1 :(得分:0)

这是我提出的一种方法...... 我不知道这是好还是对! :)

addeed:

public function connect()
{
    return $this->conn = mysqli_connect($this->server, $this->user, $this->pwd, $this->db); 
}

function fetchMyStucc
{
    $query = mysqli_query($this->connect(), $query, ...)

似乎有效。

感谢您的建议!它有帮助