如何声明和使用全局变量

时间:2019-08-12 09:46:18

标签: php global-variables

在此测试页https://wintoweb.com/sandbox/question_2.php上,访问者可以在数据库中进行搜索,并根据需要选中任意数量的复选框。单击[接受...]按钮后,我希望所有搜索的结果都显示在“到目前为止的选择”下。现在,仅显示上一次搜索。我尝试使用全局数组来存储先前搜索的结果,并在每次新搜索时将其递增。那就是我有问题的地方。

在文件顶部,我有:

<?php
    global $all_authors;
    array ($all_authors, '');
?>

在文件底部,我有:

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

if(isset($_GET['search'])){
    //echo 'Search</br>';
} elseif(isset($_GET['display_this'])) {
    echo getNames();
}

function getNames() {
    $rets = '';
    if(isset($_GET['choices']) and !empty($_GET['choices'])){
      foreach($_GET['choices'] as $selected){
        $rets .= $selected.' -- ';
      }
//array_push($all_authors, $rets); // This is the problem
//print_r($allAuthors); // this too
echo '</br><b>Your selections so far :</b></br>';
    }
    return $rets;
}
?>

预期:将列出所有以前的搜索结果 实际:由于array_push()出现问题,无法执行。参见函数gatNames()

2 个答案:

答案 0 :(得分:0)

您应该使数组在函数内部是全局的,在顶部:

$all_authors = array();

在底部:

function getNames() {
    global $all_authors;

    // Do the rest of the stuff
}

答案 1 :(得分:0)

您正在从$rets函数返回getNames,但没有使用它。您只需要使用此变量$rets而不是全局变量即可。


if(isset($_GET['search'])){
    //echo 'Search</br>';
} elseif(isset($_GET['display_this'])) {
    $rets = getNames(); //The $rets will hold the value returned by your function getName(). 
    if( !empty ( $rets ) ) {
       echo '</br><b>Your selections so far :</b></br>';
       echo $rets;
    }
}

您可以从getNames方法内部删除echo语句。

function getNames() {
    $rets = '';
    if(isset($_GET['choices']) and !empty($_GET['choices'])){
      foreach($_GET['choices'] as $selected){
        $rets .= $selected.' -- ';
      }
    }
    return $rets;
}