类内的调用函数,PHP中不使用变量

时间:2019-06-29 01:38:26

标签: php

所以我基本上是在现有系统上重新做一些代码,主要是数据库函数,然后将它们放在类而不是函数中(当前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设置公共静态函数实在不值得)

谢谢

1 个答案:

答案 0 :(得分:0)

重构的一部分是更新代码。老实说,任何IDE都可以轻松替换Yes: 50 No: 75 Yes: 50 No: 0 的用法。您可以将db_query()替换为db_query(。由于您已经静态存储了连接,因此建议将类方法也设置为静态。拥有(new Db())->db_query(之类的东西会减少冗余度,提高可读性。