PHP函数表示在前一个函数中定义的全局变量是未定义的

时间:2014-01-22 15:27:39

标签: php function variables undefined global

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

之前,我不相信这种情况

4 个答案:

答案 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);
}