有人可以帮助我理解这一点。接缝就像我已经做了100次,但由于某种原因,我现在无法让它工作。
我有一个Mysql类,我在那里做SQL。
我有一个名为ajax.php
的文件,我做了一些AJAX请求。在这个文件中我有:
$mysql = new Mysql($server, $dbuser, $dbpass, $dbselect);
$show =$mysql->count('temp_vipalm', "21");
var_dump($show);
这将返回我预期的当前值。现在我想在函数中使用它,所以我可以使它更动态,所以在同一个ajax.php文件中我创建了这个函数:
function menu($barid,$type)
{
//echo $barid; // returns correct value
//echo $bartype; //returns correct value
$mysql = new Mysql($server, $dbuser, $dbpass, $dbselect);
//usually $barid and $type goes in here, but I hardcoded the values for testing.
$show =$mysql->count('temp_vipalm', "21");
var_dump($show);
}
现在,当menu('21', 'temp_vipalm');
运行时,它会返回NULL
。
无论我做什么,它都会在函数内部继续返回NULL
- 任何人都可以帮助我了解最新情况吗?
答案 0 :(得分:1)
您的$server
,$dbuser
,$dbpass
和$dbselect
变量是全局的。在函数范围内,您必须声明这些变量来自全局范围。试试这个:
function menu($barid, $type) {
{
global $server, $dbuser, $dbpass, $dbselect;
$mysql = new Mysql($server, $dbuser, $dbpass, $dbselect);
// ...
}
注意:最好使用这些常量而不是变量。通常最好避免全局范围内的变量。如果您不小心在代码中的其他位置覆盖了其中一个值,则此函数将使用错误的值。
答案 1 :(得分:1)
变量$server, $dbuser, $dbpass, $dbselect
未在函数范围内声明,假设它们已在全局环境中定义,则应将它们声明为global
。
答案 2 :(得分:1)
有两件事需要注意:
所以这很好用:
<?php
$fred=42;
function printFred(){
global $fred; // declare it global
echo "fred is: ". $fred . "\n";
}
printFred();
?>
虽然这不符合您的预期:
<?php
echo "Starting program...\n";
printStuff();
echo "the end";
exit();
$jim="Hello I'm jim";
function printStuff(){
global $jim;
echo $jim . "\n";
}
?>
因为,在这种情况下,语句“$ jim =”你好我是吉姆“;”永远不会被执行。
此致, TonyWilk