假设我已经在PHP中定义了一个函数,最后一个参数是通过引用传递的.有什么办法可以让我选择吗?我怎么知道它是否已经设定好?
我从来没有在PHP中使用pass-by-reference,所以下面可能有一个愚蠢的错误,但这是一个例子:
$foo;
function bar($var1,&$reference)
{
if(isset($reference)) do_stuff();
else return FALSE;
}
bar("variable");//reference is not set
bar("variable",$foo);//reference is set
Run Code Online (Sandbox Code Playgroud)
Mar*_*rry 58
摘自PHP官方手册:
NULL可以用作默认值,但不能从外部传递
<?php
function foo(&$a = NULL) {
if ($a === NULL) {
echo "NULL\n";
} else {
echo "$a\n";
}
}
foo(); // "NULL"
foo($uninitialized_var); // "NULL"
$var = "hello world";
foo($var); // "hello world"
foo(5); // Produces an error
foo(NULL); // Produces an error
?>
Run Code Online (Sandbox Code Playgroud)
Pee*_*Haa 10
您可以通过为其赋予默认值来使参数可选:
function bar($var1, &$reference = null)
{
if($reference !== null) do_stuff();
else return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
但请注意,通过引用传递通常是不好的做法.如果突然我的价值$foo
被改变了,我必须找出为什么只是发现它是通过引用传递的.因此,只有在您拥有有效的用例时才能使用它(并且最信任我的不是).
另请注意,如果$reference
应该是一个对象,您可能不必(也不应该)通过引用传递它.
目前您的函数还返回不同类型的值.当引用被传递时,它返回null
,否则false
.
在回应@Martin Perry的帖子时,你可以区分
foo(); // "NULL"
Run Code Online (Sandbox Code Playgroud)
和
foo($uninitialized_var); // "NULL"
Run Code Online (Sandbox Code Playgroud)