首页 > 菜鸟mysqli问题

菜鸟mysqli问题

菜鸟求问 现在要把数据库包装下函数 但是每个函数里都要声明全局变量才行global $mysqli; 该怎么写法才好

function _connect(){//MYSQL服务器连接
global $mysqli;
$mysqli=@new mysqli ( 'localhost','root','root','ken123' );
if ($mysqli->connect_error) {
die( 'Connect Error: '.$mysqli->connect_error);
}
if(!$mysqli->set_charset ( "utf8" )){
exit('字符集不存在!');
};
}

 function _query($_sql){//执行SQL语句
global $mysqli;
if(!$result=$mysqli->query($_sql)){
exit('SQL执行失败!');
};
return $result;
}

<?php
$mysqli = new mysqli();
function crud(){ global $mysqli; }
register_shutdown_function(function() {
    global $mysqli;
    $mysqli->close();
});

很多人都觉得全局变量没有OOP的依赖注入那么优雅,但优雅能当饭吃吗?
为了优雅,是不是连PHP提供的超全局变量也不用了?简单直观才是PHP的王道.

依赖注入是一种解耦组件之间依赖关系的设计模式,可以用来替代全局变量.

<?php
class Factory {
    public static function getDb(){
        include "./Lib/Db.php";
        return new Db("localhost","root","123456","test");
    }
}
class example {
    private $_db;
    function getList(){
        $this->_db->query("...");
    }
    function setDb($connection){
        $this->_db = $connection;
    }
}
$example = new example();          //example类依赖数据库
$example->setDb(Factory::getDb()); //从外部注入数据库连接(依赖注入)
$example->getList();               //访问数据库,读取数据

phpclass mysqli {
    private $mysqli;
    function __construct(){
        $this->mysqli=@new mysqli ( 'localhost','root','root','ken123' );
        if ($this->mysqli->connect_error) {
            die( 'Connect Error: '.$this->mysqli->connect_error);
        }
        if(!$this->mysqli->set_charset ( "utf8" )){
            exit('字符集不存在!');
        };
    }
    function _query($_sql){//执行SQL语句
    if(!$result=$this->mysqli->query($_sql)){
        exit('SQL执行失败!');
    };
    return $result;
    }
}
【热门文章】
【热门文章】