PHP变量范围和全局变量

时间:2013-05-30 13:32:14

标签: php variables scope global

我有两个php文件。第一个文件将包含第二个文件。 这一切都有效。但是,在第二个文件中我有一个数组:

//set required items
$reqSettings = array(
    "apiUser" => true,
    "apiPass" => true,
    "apiKey" => true,
);

在第一个文件中调用的函数中,我想循环遍历此数组,但函数无法识别它:

function apiSettingsOk($arr) {
    global $reqSettings;

    $length = count($reqSettings);

    echo $length; //returns 0 and not 3
}

正如您所看到的,我尝试使用'全局',但这也不起作用。 你能帮我解决这个问题吗?

这两个文件只是为了完整起见;)

文件1:     

$apiArr = array();

if (isset($_POST['api-submit'])) {

    $gateWay =  $_POST['of-sms-gateway'];
    $apiArr['apiUser'] = $_POST['api-user'];
    $apiArr['apiPass'] = $_POST['api-passwd'];
    $apiArr['apiKey'] = $_POST['api-key'];

    //including the gateway file
    include_once('of_sms_gateway_' . $gateWay . '.php');

    if (apiSettingsOk() === true) {
        echo "CORRECT";
    }

}

?>

of_sms_gateway_test.php:

<?php

//set required items
$reqSettings = array(
    "apiUser" => true,
    "apiPass" => true,
    "apiKey" => true,
);

function apiSettingsOk($arr) {
    global $reqSettings;
    $returnVar = true;

    $length = count($reqSettings);

    echo $length;

    return $returnVar;

}
?>

3 个答案:

答案 0 :(得分:2)

请将“file1.php”包含在“file2.php”中,然后才能生效。

示例:

file1.php

<?php

$array = array(
    "name" => "test"
);

&GT;

file2.php

<?php

 include_once("file1.php");

 function test()
 {
     global $array;
     echo "<pre>";
     print_r($array);
 }

 test();
?>

在这里,您可以看到,它将在file2.php中打印$ array。在file1.php中声明。

希望它会有所帮助。

答案 1 :(得分:1)

您已将参数$ arr放入您未提供的函数中。它是这样的:

if (apiSettingsOk($reqSettings) === true) {
    echo "CORRECT";
}

功能

function apiSettingsOk($arr) {
echo count($arr); //returns 0 and not 3
}

答案 2 :(得分:0)

非常感谢您的帮助。

使用它我也发现在第一个文件和第二个文件的函数中将$ reqSettings声明为全局有助于做同样的事情

file1.php

<?php
    global $reqSettings;
    $apiArr = array();

    if (isset($_POST['api-submit'])) {

        $gateWay =  $_POST['of-sms-gateway'];
        $apiArr['apiUser'] = $_POST['api-user'];
        $apiArr['apiPass'] = $_POST['api-passwd'];
        $apiArr['apiKey'] = $_POST['api-key'];

        include_once('of_sms_gateway_' . $gateWay . '.php');

        if (apiSettingsOk($apiArr) === true) {

            echo "OK";

        } else {
            echo "ERROR";
        }

    }

?>

file2.php

<?php

    $reqSettings = array(
        "apiUser" => true,
        "apiPass" => true,
        "apiKey" => true,
    );

    function apiSettingsOk($arr) {
        global $reqSettings;
        $returnVar = true;

        $length = count($reqSettings);
        echo $lenght; //now shows 3

        return $returnVal;
    }

?>