我在php中创建了一个简单的函数,但我不确定如果不总是设置如何传递(可选)变量,例如:
myfunction( $var1, $var2, $_POST[example] );
你可以看到myfunction总是被调用,但$ _POST [example]只有在表格已经发送时才会被设置/存在。
我的问题是,这是正确的???如果$ _POST [示例]不存在我看到没有错误/通知(注意:未定义的变量..)但我不确定...
也许这样更好?
myfunction( $var1, $var2, isset($_POST[example]) );
答案 0 :(得分:1)
声明为:
function myfunction( $var1, $var2, $var3=null )
{
}
您可以阅读有关函数参数here的更多信息(请参阅示例#3 )。
至于你的第二个问题(关于通知) - 你必须先检查$_POST
:
if(isset($_POST['example']))
{
myfunction($var1, $var2, $_POST['example']);
}
else
{
myfunction($var1, $var2);
}
或者,或者:
myfunction($var1, $var2, isset($_POST['example'])?$_POST['example']:null);
在这种情况下,您将正确处理数据,因此不会显示错误(而不是由于错误抑制)。
答案 1 :(得分:1)
等于NULL
或false
myfunction($var1, $var2, $_POST['example']);
function myfunction($var1, $var2, $example = false)
{
if($example) {
echo $example;
}
}
答案 2 :(得分:0)
第一个案例
如果你的表单之前没有提交过,那么第三个参数的值为null
,否则提交的值。
第二种情况
如果您的表单在此之前未提交,则第三个参数的值为false
,否则为true
。
答案 3 :(得分: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');
答案 4 :(得分: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),而不是变量本身的值。如果密钥存在,则您的函数将接收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!
然后,您会看到代码真正有多少问题。 Check the manual了解每个设置的作用,使用方式和时间。