php传递一个并不总是在用户函数中设置的变量

时间:2013-08-29 06:56:06

标签: php function isset

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

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

你可以看到myfunction总是被调用,但$ _POST [example]只有在表格已经发送时才会被设置/存在。

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

也许这样更好?

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

5 个答案:

答案 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)

等于NULLfalse

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了解每个设置的作用,使用方式和时间。