今天我尝试将我的函数转换为PHP类。我尝试了一些基本步骤。
<?php
class DataBase {
private $host;
private $user;
private $password;
private $db;
private $mysqli;
function __construct() {
$this->host = "localhost";
$this->user = "root";
$this->password = "";
$this->db = "my_database";
$this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->db);
}
function __destruct() {
$this->mysqli->close();
}
public function query($query, $params = '', $bind_result) {
$stmt = $this->mysqli->prepare($query);
//Need to change this to process the array of params
$stmt->bind_param('i', $params);
$stmt->execute();
//Change this to handle array of bind
$stmt->bind_result($bind_result);
//Loop the result and store it in a temp array
$stmt->fetch();
//Don't print the statement. Just close the statement and return the array.
printf("%sn", $bind_result);
/* close statement */
$stmt->close();
}
}
?>
我现在必须创建另一个类。我在数据库中创建了一个虚拟表。
<?php
class Dummy {
private $database;
function __construct() {
$this->database = new Database();
}
public function getAllDummy() {
$query = "SELECT name FROM dummy WHERE id = ?";
$this->database->query($query, 1, 'name');
}
}
?>
但我不认为这是做事的正确方式。我觉得他们中的一些人是正确的,其中一些是错误的。
当我调用 query() 函数时,我是否需要在每个类的构造方法中一直连接数据库?还是需要将数据库类更改为静态函数?所以我可以调用像数据库::查询();
看来我需要从一开始就创造一切。互联网上已经有这样的模型了吗?像蛋糕,代码点火器
我想推荐你阅读一些关于 ORM for PHP 的东西。例如,我正在使用教义2(http://www.doctrine-project.org/)它有点复杂,但绝对值得学习。您尝试编写的所有代码都已经完成,那么为什么要再次编写呢?
在你的OOP原则中有一些错误。
- 您正在为每个类创建数据库实例,例如Dummy,如果您有类用户,文章,您将创建3x数据库,这不是很好。您应该将数据库作为服务或单例,并且只制作一次。对此的良好解决方案可以是依赖注入(http://en.wikipedia.org/wiki/Dependency_injection)。
- 此外,我建议您概括整个虚拟类,使其更通用。不要使方法"getAllDummy",例如"getAll($tableName)"这样您就可以将其用于每个表。
除了教义(已经强大而全能,但仍然很复杂)之外,我可以建议你db.php(http://dbphp.net)它做所有什么教义,但它是一个文件,非常易于使用。缺点:它还没有很好的记录,也没有大的社区。