php oop变量范围

时间:2010-02-24 02:21:15

标签: php oop scope

所以我有一个类..在它的构造函数中,我包含了通过mysqli扩展将我连接到我的数据库的代码:

class MyClass
{
    public function __construct()
    {
        include("dbconnect");
    }
}

dbconnect看起来像这样:

$host = "localhost";
$user = "user";
$pass = "123";
$database = "myDatabase";

$mysqli = new mysqli($host, $user, $pass, $database);
$mysqli->set_charset('utf8-bin');

现在我的问题:由于mysqli可以用于OOP-Style,如何在MyClass中访问变量?

function doIt()
{    
    $query = "SELECT * FROM myTable";    
    $result = $mysqli->multi_query($query);
}

调用此函数会导致

  

注意:未定义的变量:mysqli in   ......在线......       致命错误:在非对象上调用成员函数multi_query()   在......在线...

所以似乎变量的范围不对。有谁知道如何解决这一问题?如果MyClass不需要额外的引用或mysqli的东西,那将是最好的,因为我希望将它分开。

3 个答案:

答案 0 :(得分:5)

$mysqli变量仅在构造函数的范围内可用。像这样改变你的构造函数:

class MyClass
{
    public function __construct()
    {
        include("dbconnect");
        $this->mysqli = $mysqli;
    }
}

现在,您可以在该对象的其他方法中使用$this->mysqli

答案 1 :(得分:2)

该变量与函数内的任何其他变量具有相同的范围:它仅在函数内有效。一旦函数返回,它就消失了。如果要为类中的其他函数“持久化”变量,请将其设为Class成员:

class MyClass {
    var $member = null;

    function foo() {
        $localVar = $this->member;
        $this->anotherMember = 'bar';  // $anotherMember is now available for other functions
    }
}

通过include重用代码并不恰当,因为它无法控制变量的使用方式。我考虑重组这个东西,比如创建一个建立数据库连接的函数,然后returns数据库句柄。

答案 2 :(得分:0)

您正在寻找的是“全球”关键字。但总的来说,我会避免使用全局变量并重新考虑你的设计。