0

我在 php 中创建了一个简单的函数,但如果不总是设置,我不确定如何传递(可选)变量,例如:

myfunction( $var1, $var2, $_POST[example] );

如您所见,myfunction 总是被调用,但 $_POST[example] isset/exist 仅在表单已发送时才存在。

我的问题是,这样对吗???如果 $_POST[example] 不存在,我看不到错误/通知(注意:未定义的变量..)但我不确定...

也许这样更好?

 myfunction( $var1, $var2, isset($_POST[example]) );
4

5 回答 5

1

将其声明为:

function myfunction( $var1, $var2, $var3=null )
{
}

您可以在此处阅读有关函数参数的更多信息(参见Example#3)。

至于你的第二个问题(关于通知) - 你必须检查你的$_POST第一个问题:

if(isset($_POST['example']))
{
   myfunction($var1, $var2, $_POST['example']);
}
else
{
   myfunction($var1, $var2);
}

或者,或者:

myfunction($var1, $var2, isset($_POST['example'])?$_POST['example']:null);

在这种情况下,您将正确处理您的数据,并且因此不会显示错误(而不是由于错误抑制)。

于 2013-08-29T07:00:30.547 回答
1

等于NULLfalse

myfunction($var1, $var2, $_POST['example']);

function myfunction($var1, $var2, $example = false)
{
    if($example) {
       echo $example;
    }
}
于 2013-08-29T07:01:59.657 回答
0

第一个案例

如果您的表单之前没有提交过,那么第三个参数的值将是null提交的值。

第二种情况

如果您的表单之前未提交,则第三个参数将具有该值false,否则true

于 2013-08-29T07:02:04.143 回答
0

您可以尝试这样的事情。在函数定义期间,将参数声明为可选参数。

class test{
public function myFun($arg1,$arg2,$arg3 = ''){
echo 'Argument 1 - '.$arg1;
echo 'Argument 2 - '.$arg2;
if($arg3!= '')
   echo 'Argument 3 - '.$arg3;
}
}
 $obj = new test();
 echo $obj->myFun('One','Two');
于 2013-08-29T07:03:00.603 回答
0

正如 AlmaDoMundo 的回答所示:使参数可选:

function myFunction($arg1, $arg2, $arg3 = null)
{
}

然后,为了避免警告(未定义的索引),您必须像这样调用该函数:

if (isset($_POST['example']))
{
    myFunction($var1, $var2, $_POST['example']);
}
else
{
    myFunction($var1, $var2);
}

如果由于某种原因您无法更改函数定义(因此,它是签名),只需像这样调用函数:

$var3 = isset($_POST['example']) ? $_POST['example'] : null;
myFunction($var1, $var2, $var3);//null is a value, so you're passing 3 arguments

以第二种方式调用你的函数myFunction($var1, $var2, isset($_POST['example']));不是前进的方向。只看isset签名

bool isset ( mixed $var [, mixed $... ] )

它返回一个bool(真/假),而不是变量本身的值。如果键存在,您的函数将true作为第三个参数接收,如果不存在false。您想传递实际值,因此您必须将代码包装在if/else分支中,或者使用三元 ( myFunction($var1, $var2, isset($_POST['example']) ? $_POST['example'] : null);
就我个人而言,我不会在这里使用三元,因为第一个示例说明了如何调用我给出的函数这里更具可读性(编写可维护的代码很重要!)

在通知中:
您说如果您通过了,您不会看到任何错误/警告$_POST['example'](您应该引用'example', BTW,因为这也应该发出警告)。尝试将您的 ini 设置更改为:

error_reporting  =  E_ALL | E_STRICT
#and
display_errors = 1
display_startup_errors = 1 # careful here!

然后,您将看到您的代码确实存在多少问题。查看手册以了解每个设置的作用、如何以及何时使用它们。

于 2013-08-29T07:03:24.247 回答