[英]Simple PHP OOP and MySQLI
我正在尝试学习更多的PHP,OOP和MySQLI,但是我陷入了困境。 Google并没有帮助我,在这个网站上搜索也没有给我任何结果。 我有一个配置类可以连接到数据库,在另一个类中,我想运行一些查询,但是无论尝试什么,都会遇到此错误:
致命错误:在第9行的test.php中的非对象上调用成员函数query()
有人可以帮帮我吗?
config.php:
<?php
class Database
{
private $host;
private $user;
private $password;
private $db;
private $mysqli;
function __construct() {
$this->host = "private";
$this->user = "private";
$this->pass = "private";
$this->data = "private";
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->data);
}
public function query($query)
{
return $this->mysqli->query($query);
}
}
?>
test.php:
<?php
class Dummy
{
private $Database;
function __construct()
{
$this->Database = new Database();
$this->Database->test = $this->mysqli->query("SELECT test FROM test")->fetch_object()->test;
}
}
?>
index.php:
<?php
require 'config.php';
require 'test.php';
$test = new Database();
$test = new Dummy();
echo $this->Database->test;
?>
如何使用依赖注入,创建Database对象,然后将其作为参数通过构造传递给类。
<?php
class Database
{
private $host;
private $user;
private $password;
private $db;
private $mysqli;
function __construct($host,$user,$pass,$data) {
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->data = $data;
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->data);
}
public function query($query)
{
return $this->mysqli->query($query);
}
}
?>
...
<?php
class Dummy
{
function __construct(Database $db)
{
$this->db = $db;
}
function get_test_yada(){
return $this->db->mysqli->query("SELECT test FROM test")->fetch_object()->test;
}
}
?>
...
<?php
$db = new Database('127.0.0.1','root','pass','database');
$dummy = new Dummy($db);
$dummy->get_test_yada();
?>
未经测试,希望对您有所帮助
出于善意,请勿立即学习所有内容。 您不会得到任何明智的结果。
每个都是单独的难题,而OOP则是最困难的。
对于数据库交互,请使用PDO准备的语句。
作为OOP的实践,切勿从服务扩展类,而应将其用作类变量。
class Dummy
{
protected $db;
function __construct($pdo)
{
$this->db = $pdo;
}
}
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->data);
如果连接失败,则无法对该成员变量进行任何调用。 检查是否首先建立连接。
而且,如果您想访问该变量,则应将其公开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.