菜鸟求问 现在要把数据库包装下函数 但是每个函数里都要声明全局变量才行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(); //访问数据库,读取数据
php
class 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; } }