在我的代码中,我有一个初始化MySQLi类的文件.
档案a:
$db = new Database(); //MySQLi class
无论如何,有一个包含此数据库类的文件.该文件还包括其中声明了函数的其他文件.我正在使用全球联系$db
文件b:
function xy(){
global $db;
$sql = "..."
return $db->getArray($sql);
}
TESTFILE:
require "file_a.php";
require "file_b.php";
require_once "PHPUnit/Framework/TestCase.php";
class testProblemStatistics extends PHPUnit_Framework_TestCase {
testArray(){
$this->assertTrue(array_key_exists('xy', $this->xy())
}
}
我明白了:
致命错误:在非对象上调用成员函数getArray()
我调查过:
var_dump($db);
function xy(){
global $db;
var_dump($db);
...
}
第一个转储给了我MySQLi对象,
第二个转储给了我NULL
file_b中的全局变量有问题.
附加信息:我正在使用PHPUnit,我在命令提示符下运行它.在普通浏览器中一切正常.
解决方法:
解决方案是将数据库类硬编码到$GLOBALS数组中.
$GLOBALS['db'] = $db;
添加它作为PHPUnit引导程序对我来说很好.它有点hacky,应该用在测试用例中.
标签:php,global-variables,mysqli,phpunit
来源: https://codeday.me/bug/20190713/1447301.html