Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 全局作用域变量未从函数返回_Php - Fatal编程技术网

Php 全局作用域变量未从函数返回

Php 全局作用域变量未从函数返回,php,Php,我想我已经盯着这个看太久了,但是为什么$sum不回应23呢? 我的目标是将全局作用域的$sum注入函数,并在函数完成时返回 <?php $sum = 0; function find_divisible() { for ($i = 0; $i < 10; $i++) { if ($i % 5 == 0) { echo "<br>".' $sum is equal to '.$sum.' and $i is equal

我想我已经盯着这个看太久了,但是为什么$sum不回应23呢? 我的目标是将全局作用域的$sum注入函数,并在函数完成时返回

<?php

$sum = 0;

function find_divisible() {

    for ($i = 0; $i < 10; $i++) {

        if ($i % 5 == 0) {
            echo "<br>".' $sum is equal to '.$sum.' and $i is equal to '.$i;
            $sum += $i;
        }elseif ($i % 3 == 0) {
            echo "<br>".' $sum is equal to '.$sum.' and $i is equal to '.$i;
            $sum += $i;
        }else {
            echo "<br/>$i is not divisible...";
        }

    }

    return $sum;

}


find_divisible($sum);
echo "<br>";
echo $sum;
?>

因此,在代码中有3个主要错误/问题:

一,。您忘记了顶部函数中的下一行

global $sum;
二,。返回$sum,但不将函数调用分配给变量,因此可以删除它

三,。将$sum作为参数传递给函数,但函数不接受任何参数,因此删除函数调用中的所有参数

但是为了实现你的目标,我看到了34种不同的方式

一,。现在使用全局变量,但我不建议这样做,因为以后会变得非常混乱和封装?如果您使用global,您可能会忘记这一点

二,。您可以将变量作为参数传递,您的代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;
三,。您可以通过引用传递变量,您的代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;
四,。如果您说$sum始终为0,并且只返回$sum并将其分配给变量,则不必使用任何参数,代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;

希望这个答案对您有所帮助,我认为看到不同的方法/解决方案总是很好的

因此在您的代码中有3个主要错误/问题:

一,。您忘记了顶部函数中的下一行

global $sum;
二,。返回$sum,但不将函数调用分配给变量,因此可以删除它

三,。将$sum作为参数传递给函数,但函数不接受任何参数,因此删除函数调用中的所有参数

但是为了实现你的目标,我看到了34种不同的方式

一,。现在使用全局变量,但我不建议这样做,因为以后会变得非常混乱和封装?如果您使用global,您可能会忘记这一点

二,。您可以将变量作为参数传递,您的代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;
三,。您可以通过引用传递变量,您的代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;
四,。如果您说$sum始终为0,并且只返回$sum并将其分配给变量,则不必使用任何参数,代码如下所示:

$sum = 0;

function find_divisible($sum) {

    //Code

    return $sum;

}

$sum = find_divisible($sum);
echo $sum;
$sum = 0;

function find_divisible(&$sum) {
                      //^ See here

    //Code

}

find_divisible($sum);
echo $sum;
function find_divisible() {

    $sum = 0;

    //Code

    return $sum;

}

$sum = find_divisible();
echo $sum;
希望这个答案对您有所帮助,我认为看到不同的方法/解决方案总是很好的

您可以将$sum作为如下参考:

function find_divisible(&$sum) {
    // code here
}
但是您不需要从函数返回它。在函数中对其所做的任何更改都将对传递到find_divisible$sum的原始变量进行更改。您可以将$sum作为引用传递,如下所示:

function find_divisible(&$sum) {
    // code here
}

但是您不需要从函数返回它。在函数中对它所做的任何更改都会对传递到find_divisible$sum的原始变量进行更改,只需使用global关键字即可

global $sum;
尽管如此,我还是建议将其作为这样的参数

function find_divisible($sum) {
    ...
}

只需使用全局关键字

global $sum;
尽管如此,我还是建议将其作为这样的参数

function find_divisible($sum) {
    ...
}

您真的应该远离全局关键字,因为它破坏了封装,从长远来看可能会引起很多麻烦。最好将变量作为参数传递到函数中。@CarlMarkham同意你的观点,而且因为我认为$sum是每次0 OP甚至不需要作为参数传递时,他就可以在函数中声明它。我唯一能想到的是,作为一个论据,值得一提的是for loopSorry@Rizier123的最大值,但只要global仍然是您的首选解决方案,就要保持向下投票answer@BrokenBinary这是什么便宜的促销@CarlMarkham谢谢,至少你能解释你为什么否决投票!有了这个,我就可以更好地工作并给出答案。你真的应该远离全局关键字,因为它破坏了封装,从长远来看可能会引起很多麻烦。最好将变量作为参数传递到函数中。@CarlMarkham同意你的观点,而且因为我认为$sum是每次0 OP甚至不需要作为参数传递时,他就可以在函数中声明它。我唯一能想到的是,作为一个论据,值得一提的是for loopSorry@Rizier123的最大值,但只要global仍然是您的首选解决方案,就要保持向下投票answer@BrokenBinary这是什么便宜的促销@CarlMarkham谢谢,至少你能解释你为什么否决投票!有了这个,我可以工作,让答案更好。我也是这样!非常感谢!事实上,你告诉我,我也不必做回报。我也喜欢这个!非常感谢!事实上,你告诉我,我也不必做回报。