使用函数时与PHP范围混淆

时间:2014-11-04 14:59:57

标签: php scope

我有两个不同的.php文件,第一个名为get_data.php,看起来像这样:

<?php
    ...

    $current_date = date("Y-m-d H:i:s");

    $total_sales = 35;
    $total_revenue = 12;

    $this_month_sales = 3;
    $this_month_revenue = 7;

    $last_month_sales = 2;
    $last_month_revenue = 5;

    ...
?>

现在,我正在使用的第二个文件名为index.php,位于index.php的顶部,我的任何HTML之前都有以下代码

<?php include_once 'get_data.php'; ?>

现在,只需输入变量名称,我就可以从get_data.php内部引用index.php的值,这可行。

但是,我在function()内有一个index.php,我用来检查值并将百分比作为字符串返回

此功能如下所示:

function compareMonths($checkingRevenue) {
    global $this_month_revenue;
    global $this_month_sales;
    global $last_month_revenue;
    global $last_month_sales;

    ...
}

但是,对于所有四个变量,此函数返回“0”。我试过不把它们设置为全局的。如何从get_data.php中获取值在index.php中的函数范围内?

我的解决方案就是将函数放在get_data.php中,但我想知道如何正确设置范围,以便将来可以做这样的事情。

这让我感到困惑,因为include_once的文档说明了

  

当包含文件时,它包含的代码将继承&gt;中行的变量范围。包含发生的内容。调用文件中该行可用的任何变量都将>从那时起,在被调用文件中可用。但是,所有功能和>包含文件中定义的类具有全局范围。

这意味着它应该是可访问的,不是吗?

1 个答案:

答案 0 :(得分:0)

假设

global $this_month_revenue;
global $this_month_sales;
global $last_month_revenue;
global $last_month_sales;

是调用它时要传递给函数的变量。例如:

compareMonths($checkingRevenue, $this_month_revenue, $this_month_sales);

function compareMonths($checkingRevenue, $val1, $val2) {}