方法返回函数外的右值,里面的函数返回NULL

时间:2014-01-24 02:24:09

标签: php function

有人可以帮助我理解这一点。接缝就像我已经做了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 - 任何人都可以帮助我了解最新情况吗?

3 个答案:

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

有两件事需要注意:

  1. 全局变量必须在函数内声明为全局
  2. 该变量必须已初始化
  3. 所以这很好用:

    <?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