function connectMySQL()
{
$link = mysqli_connect("localhost", "", "", "");
global $link;
return $link;
}
function checkCredentials($username, $password)
{
connectMySQL();
print_r($link);
}
使用checkCredentials函数时,出现以下错误:
注意:未定义的变量:C:\ xampp \ htdocs \ zone \ funcs.php中的链接
如果我将以下代码添加到connectMySQL函数中,则会显示所有正确的信息
print_r($link);
exit();
只是在checkCredentials函数中调用该函数时,它表示它未定义。 在开始将代码切换到MySQLi
之前,我不相信这种情况答案 0 :(得分:1)
global
关键字没有将任何变量放入全局范围,它从那里导入它们,你的函数应该看起来像这样。
function connectMySQL() {
return mysqli_connect("localhost", "", "", "");
}
function checkCredentials( $username, $password ) {
$link = connectMySQL();
print_r( $link );
}
答案 1 :(得分:0)
$link
超出了范围。
你应该在调用connectMySQL()时分配一个变量。
找到下面的代码。
function connectMySQL()
{
$link = mysqli_connect("localhost", "", "", "");
return $link;
}
function checkCredentials($username, $password)
{
$link=connectMySQL();
print_r($link);
}
答案 2 :(得分:0)
关键字global
不会生成局部变量global,而是指定给定名称引用全局可用变量。 You can read up on PHP's variable scoping here
尽管如此,global
的使用在大多数语言中都不受欢迎,如果不是所有语言,应该不惜一切代价避免使用。
除此之外,我也相信我说global
变量应该写在当前范围的顶部是正确的:
function evilFunc()
{
global $foo;
$foo = 'Set value';
}
function anotherEvil()
{
global $foo;
echo 'I am a bad function, because I use global variables, like $foo: ', $foo;
}
$foo = 123;
anotherEvil();//will end its echo with 123
evilFunc();
anotherEvil();//echo will now show Set value instead
底线:如果函数需要给定的实例/值来完成其工作: 将其作为参数传递 。如果一组函数都需要相同的实例或值, 将它们包装在一个类中,并使用属性 。
我已经写PHP十多年了,在那段时间里,我可能使用global
少于5次,当然少于10次。如果我今天再次编写该代码,我想我可能会做不同的事情......
答案 3 :(得分:0)
始终使用global关键字在函数&中导入全局变量方法
$link = null; // declare global
function connectMySQL() {
global $link;
if (isset($link) == false) {
$link = mysqli_connect("localhost", "", "", ""); // make global connection
}
}
function checkCredentials($username, $password) {
connectMySQL();
global $link; // use global connection
print_r($link);
}