Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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,我正在尝试编写一个简单的函数,它接受两个参数,将它们相加并返回计算结果 在执行计算之前,该函数检查两个参数中是否有一个未定义,如果是,则将参数设置为0 以下是我的功能: 函数-PHP function returnZeroAdd ($arg, $arg2) { if(!isset($arg)) { $arg = 0; } if(!isset($arg2)) { $arg2 = 0; } echo $arg

我正在尝试编写一个简单的函数,它接受两个参数,将它们相加并返回计算结果

在执行计算之前,该函数检查两个参数中是否有一个未定义,如果是,则将参数设置为
0

以下是我的功能:

函数-PHP

function returnZeroAdd ($arg, $arg2)
{
    if(!isset($arg))
    {
        $arg = 0;
    }

    if(!isset($arg2))
    {
        $arg2 = 0;
    }

    echo $arg + $arg2;
}
我试着这样做:

returnZeroAdd($bawtryReturnCount, $bawtryFReturnCount);
但这会引发
未定义变量$bawtryFReturnCount
错误

我不知道为什么函数在执行计算之前没有将
$bawtryFReturnCount)
设置为
0
,从而消除“未定义变量”错误


有人能提供解决方案吗?

你不能按自己的方式来做。一旦使用未定义的变量,就会出现此错误。因此,错误不会发生在函数内部,而是已经发生在对函数的调用中

1。可选参数

您可以将参数设置为可选,如下所示:

function returnZeroAdd ($arg = 0, $arg2 = 0)
{
    return $arg + $arg2;
}
这样,参数是可选的,您可以这样调用函数:

echo returnZeroAdd(); // 0
echo returnZeroAdd(1); // 1
echo returnZeroAdd(1, 1); // 2
2。参考

但我不确定这是否是你想要的。此呼叫仍将失败:

echo returnZeroAdd($undefinedVariable);
这可以通过引用传递变量来解决。然后,您可以检查是否设置了这些值,如果设置了,则在加法中使用它们

<?php
function returnZeroAdd (&$arg, &$arg2)
{
    $result = 0;
    if(isset($arg))
    {
        $result += $arg;
    }

    if(isset($arg2))
    {
        $result += $arg2;
    }

    return $result;
}

echo returnZeroAdd($x, $y);

如果确实要在函数内部进行检查,可以通过引用传递参数:

function returnZeroAdd (&$arg, &$arg2)
{
    if(!isset($arg))
    {
        $arg = 0;
    }

    if(!isset($arg2))
    {
        $arg2 = 0;
    }

    echo $arg + $arg2;
}
但是,这可能会修改函数外部的参数,如果您不打算这样做,则需要:

function returnZeroAdd (&$arg, &$arg2)
{
    if(!isset($arg))
    {
        $localArg = 0;
    }
    else
    {
        $localArg = $arg;
    }

    if(!isset($arg2))
    {
        $localArg2 = 0;
    }
    else
    {
        $localArg2 = $arg2;
    }

    echo $localArg + $localArg2;
}
您现在可以传递未定义的变量,它不会抛出任何错误

或者,您可能希望为参数指定默认值(在您的情况下,0似乎合适):


该错误不是由函数本身引发的,因为函数不知道全局范围。该错误甚至在函数执行之前就抛出,而PHP interperter试图将
$bawtryFReturnCount
传递给该函数时,没有找到它,并抛出错误,但是,这不是致命错误,执行也没有停止。因此,函数是使用默认值为null的非set变量执行的,我想,在这里,isset将不起作用,因为参数是必需的,但不是可选的。更好的检查方法是
空($arg)
,但是错误仍然存在

因为函数不知道也不应该知道应用程序的全局状态,所以应该从函数外部执行这些检查,然后调用它

if (!isset($bawtryReturnCount)) {
    $bawtryReturnCount = 0
}

returnZeroAdd($bawtryReturnCount);

或者为函数中的参数指定默认值,使其成为可选的而不是必需的。

您的函数可以重写为:

function returnZeroAdd ($arg = 0, $arg2 = 0)
{
    echo $arg + $arg2;
}
你不了解变量是如何工作的。因为调用函数时未定义$bawtryFReturnCount
;你会得到警告。您的isset检查执行检查太晚。例如:

$bawtryReturnCount = 4;
$bawtryFReturnCount = 0;

returnZeroAdd($bawtryReturnCount, $bawtryFReturnCount);

不会导致错误。

在将变量传递给函数之前,必须先定义该变量。比如说

     $bawtryReturnCount=10;
     $bawtryFReturnCount=5;
   define the two variable with some value and pass it to that function.
     function returnZeroAdd ($arg=0, $arg2=0)
     {

       echo $arg + $arg2;
     }
如果定义这样的函数,则意味着如果未传递参数,则该函数的默认值为0。 例如,您可以像这样调用functio returnZeroadd();//打印0 返回零添加(4);//打印4 returnZeroadd(4,5);//印刷品9 或者您可以定义两个变量并将其作为参数传递,然后像这样调用

     $bawtryReturnCount=10;
     $bawtryFReturnCount=5;
     returnZeroadd($bawtryReturnCount, $bawtryFReturnCount);

参数将始终在函数中定义,因为您已将它们都设置为必需的。。。。您的调用代码需要执行该检查以使函数参数可选,使用类似于
function returnZeroAdd($arg=null,$arg2=null)
的方法并测试null或empty,而不是issetThanks,以获得完整的解释-这已经奏效了。
     $bawtryReturnCount=10;
     $bawtryFReturnCount=5;
   define the two variable with some value and pass it to that function.
     function returnZeroAdd ($arg=0, $arg2=0)
     {

       echo $arg + $arg2;
     }
     $bawtryReturnCount=10;
     $bawtryFReturnCount=5;
     returnZeroadd($bawtryReturnCount, $bawtryFReturnCount);