如何在每个类中避免多个mysqli请求?

时间:2013-12-04 23:30:13

标签: php oop methods constructor mysqli

我只知道OOP的基础知识。实际上我使用MySQLi连接,我想避免每次在Classes方法中调用它。我还想避免将其作为参数包含在内。

$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);

class C1
{
    function F1()
    {
        // Using $mysqli->query();
    }

    function F2()
    {
        // Using $mysqli->query();
    }
}

class C2
{
    function F1()
    {
        // Using $mysqli->query();
    }
}

我读过this post几乎没有帮助我理解使用Constructors表示要采取的方向但我不明白具体如何使用它们。

我尝试过类似的东西:

$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);

class C1
{
    private $mysqli;

    public function __construct(mysqli $mysqli)
    {
        $this->mysqli = $mysqli;
    }

    public static function F1()
    {
        print_r($this->mysqli);
        // $mysqli = $this->mysqli;
    }
}

C1::F1();

但我收到了这个错误:

  

致命错误:在第38行的C:\ Users \ Ivan \ Documents \ GitHub \ PhpRestDoc \ test.php中不在对象上下文中时使用$ this

1 个答案:

答案 0 :(得分:1)

如果您想使用静态方法,您的代码将如下所示:

$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);

class C1
{
private static $mysqli;

public static function setConnection($db) 
{
    self::$mysqli = $db;
}

public static function F1()
{
    print_r(self::$mysqli);
    // $mysqli = self::$mysqli;
}
}

C1::setConnection($mysqli);

C1::F1();

您也可以创建它的实例:

$mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);

class C1
{
private $mysqli;

public function __construct($mysqli)
{
    $this->mysqli = $mysqli;
}

public function F1()
{
    print_r($this->mysqli);
    // $mysqli = $this->mysqli;
}
}

$model = new C1($mysqli);
$model -> F1();