在PHP中满足条件时如何给出参数?

在PHP中满足条件时如何给出参数?,php,arguments,conditional-statements,Php,Arguments,Conditional Statements,当我想向用户发送邮件以通知他们某个事件时,我将在PHP中调用mail()函数。我想给mail函数第五个参数,但由于在safe_模式下禁用了该参数,因此在给出该参数时,mail()函数将返回false。我的问题基本上是: 如何编写这段代码: if (!$bSafeMode) { mail($sTo, $sSubject, $sBody, $sHeader, $sFifthArgument); } else { mail($sTo, $sSubject, $sBody, $sHead

当我想向用户发送邮件以通知他们某个事件时,我将在PHP中调用mail()函数。我想给mail函数第五个参数,但由于在safe_模式下禁用了该参数,因此在给出该参数时,mail()函数将返回false。我的问题基本上是:

如何编写这段代码:

if (!$bSafeMode) {
    mail($sTo, $sSubject, $sBody, $sHeader, $sFifthArgument);
} else {
    mail($sTo, $sSubject, $sBody, $sHeader);
}
但在某种程度上:

mail($sTo, $sSubject, $sBody, $sHeader, (!$bSafeMode? $sFifthArgument : ''));
很明显,我给你看的这段代码不起作用,但我想知道是否有类似的东西,这样我就可以让我的代码更整洁

请不要和我争论为什么我要这样做,为什么我要检查安全模式等等。我只是想知道,我想要的是不是可能的,我会怎么做


提前谢谢

您必须将
null
传递给函数(就我所知,在mail的情况下,这也是第五个参数的默认值)

所以它就像:
mail($sTo,$ssobject,$sBody,$sHeader,(!$bSafeMode?$sfiftChargument:null))这应该是允许的。另请参见示例:)


正如菲尔在下面的评论中提到的;它可能会检查通过的参数数量(我不能在这里测试,但我希望如此)。这基本上意味着你们被“如果”和“如果”所束缚;这是完全可读的(而且可能更好的文档化!)。

您必须将
null
传递给函数(就我所知,在邮件的情况下,这也是第五个参数的默认值)

所以它就像:
mail($sTo,$ssobject,$sBody,$sHeader,(!$bSafeMode?$sfiftChargument:null))这应该是允许的。另请参见示例:)


正如菲尔在下面的评论中提到的;它可能会检查通过的参数数量(我不能在这里测试,但我希望如此)。这基本上意味着你们被“如果”和“如果”所束缚;这是完全可读的(也许还有更好的文档性!)。

当然,你可以这样做

$args = array('foo', 'bar');
if($blah) $args[] = 'baz';
call_user_func_array('mail', $args);

但是我不认为这比你的第一个片段好多少当然,你可以做一些

$args = array('foo', 'bar');
if($blah) $args[] = 'baz';
call_user_func_array('mail', $args);

但是我不认为这比你的第一个代码片段好。我认为你的第一段代码看起来很好。你的第二个例子看起来很好,只是你通常会传递
NULL
,而不是
'
空字符串来表示缺少的参数。另一个解决方案是
调用用户函数数组
,但实际上不符合“整洁”的条件。如果您不想使用可能有助于我们理解目标的参数,那么像这样的公共格式可能不适合您?我看不出第一种形式和第二种形式之间的区别,只是第二种形式不起作用。第一个
的关键部分是什么?如果这是错误的,那么我们可以和你一起思考吗?@mario取决于
mail()
在启用安全模式时如何在内部检查参数。我不是说第一个部分完全错了,我只是说如果我能在一行中完成它会比在两行中完成要好(IMHO)。我认为您的第一段代码看起来很好。您的第二个示例看起来很好,只是您通常会传递
NULL
,而不是
'
空字符串来表示缺少的参数。另一个解决方案是
调用用户函数数组
,但实际上不符合“整洁”的条件。如果您不想使用可能有助于我们理解目标的参数,那么像这样的公共格式可能不适合您?我看不出第一种形式和第二种形式之间的区别,只是第二种形式不起作用。第一个
的关键部分是什么?如果这是错误的,那么我们可以和你一起思考吗?@mario取决于
mail()
在启用安全模式时如何在内部检查参数。我不是说第一个部分完全错了,我只是说如果我能在一行中完成它会比在两行中完成要好(IMHO).我感觉安全模式检查将使用
argc
来确定内部参数的数量,在这种情况下,传递
null
仍将计为5。需要测试才能确定啊,我看我部分误读了这个问题。没想到$bSafeMode会链接到php安全模式配置。。。在这种情况下,你(不幸地)是对的;我感觉安全模式检查将使用
argc
来确定内部参数的数量,在这种情况下传递
null
仍将计为5。需要测试才能确定啊,我看我部分误读了这个问题。没想到$bSafeMode会链接到php安全模式配置。。。在这种情况下,你(不幸地)是对的;然后再也没有其他方法可以使用if-else构造了;调用用户函数数组bail out不会告诉您它需要一个有效的回调吗?至少我认为它只能用于用户定义的函数(顾名思义),但我可能错了-编辑+剪报-是的,医生明确表示它不适用于echo-heh。你的回答是我问题的唯一有效答案,尽管它确实不是最干净的选择。最后我决定坚持我的第一个if-else构造;调用用户函数数组bail out不会告诉您它需要一个有效的回调吗?至少我认为它只能用于用户定义的函数(顾名思义),但我可能错了-编辑+剪报-是的,医生明确表示它不适用于echo-heh。你的回答是我问题的唯一有效答案,尽管它确实不是最干净的选择。最后我决定坚持我的第一个if-else结构。