所以我基本上是在现有系统上重新做一些代码,主要是数据库函数,然后将它们放在类而不是函数中(当前mysqli_connect DSN信息是在全局变量中设置的,并且每一个都在使用查询完成的时间,这就是为什么我要清理此问题,但现在不尝试重新做整个系统的原因。
当前系统中有许多PHP文件,其中将包含具有诸如function db_query($query,$DSN){}
之类功能的主dbconnect.php文件,并且几乎在每个其他文件中,实际的SQL查询都被写出,然后以db_query($query);
就是这样。
我已经按照下面的代码移动到了某个地方:
dbconnect.php
class Db {
protected static $connection;
function __construct() {
if (! isset($GLOBALS['DEBUG'])) { $GLOBALS['DEBUG'] = 0; }
}
public function connect() {
if(!isset(self::$connection)) {
self::$connection = new mysqli($GLOBALS['DSN']);
}
if(self::$connection === false) {
return false;
}
unset($GLOBALS['DSN']); //unset so that login info is not roaming around anymore now that the connection has been established
return self::$connection;
}
public function db_query($query) {
$connection = $this->connect();
$result = $connection->query($query);
return $result;
}
}
otherphpfile.php
include_once 'dbconnect.php';
(new Db()); //I have also tried new Db();
$query = "SELECT * FROM table;";
db_query($query); //I have to try to do it like this since 99.9% of the system is already using this method and I don't want to have to go through all the code and update it with something like:
$db = new Db();
$db->db_query($query);
我知道$db = new Db(); $db->db_query($query);
是正确的,但是我试图像这样new Db();
那样做,但没有为其分配任何变量,因为dbconnect.php
的所有其他函数都编写为没有变量像db_query($query);
这样的函数调用之前,就像它们现在一样,而无需我去将它们全部更新为$db->db_query($query);
。
我希望这是有道理的,并且在不损害使用类开头的利益的前提下,任何建议都是很好的(AKA设置公共静态函数实在不值得)
谢谢
答案 0 :(得分:0)
重构的一部分是更新代码。老实说,任何IDE都可以轻松替换Yes: 50
No: 75
Yes: 50
No: 0
的用法。您可以将db_query()
替换为db_query(
。由于您已经静态存储了连接,因此建议将类方法也设置为静态。拥有(new Db())->db_query(
之类的东西会减少冗余度,提高可读性。