假设我在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
答案 0 :(得分:56)
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
?>
答案 1 :(得分:9)
您可以通过为参数提供默认值来使参数可选:
function bar($var1, &$reference = null)
{
if($reference !== null) do_stuff();
else return FALSE;
}
但是请注意,一般来说,通过引用传递是不好的做法。如果突然我的$foo
的值发生了变化,我必须找出为什么只是发现它是通过引用传递的。因此,只有在您拥有有效的用例时才能使用它(并且最信任我的不是)。
另请注意,如果$reference
应该是一个对象,您可能don't have to(并且不应该)通过引用传递它。
目前您的函数还返回不同类型的值。传递引用时,它将返回null
,否则返回false
。
答案 2 :(得分:6)
答案 3 :(得分:3)
您可以设置默认值
$foo;
function bar($var1,&$reference = false)
{
if($reference != false) do_stuff();
else return FALSE;
}
bar("variable");//reference is not set
bar("variable",$foo);//reference is set
答案 4 :(得分:1)
尝试
use function bar($var1,&$reference=null)
{
if(isset($reference)) do_stuff();
else return FALSE;
}
如果您将值传递给&amp; $引用,它将采用该值。或者null。
答案 5 :(得分:1)
两个选项:
声明默认值,该值超出常规值范围,例如-1
function bar($var1,&$reference = -1)
{
if($reference !== -1) do_stuff();
else return FALSE;
}
不要声明参数并检查func_get_args()
以查看它是否已通过:
function bar($var1)
{
if(count(func_get_args()) > 1) do_stuff();
else return FALSE;
}
但请注意,第二种方法会触发弃用警告:Call-time pass-by-reference has been deprecated;
答案 6 :(得分:1)
以下代码段说明引用只是变量名称的别名:
<?php
function set_variable(&$var, $val)
{
$var = $val;
}
set_variable($b, 2);
echo $b; // 2
?>
Larry Ullman的这个article解释了通过引用传递变量和传递值的基础知识。
有趣的是,Larry的文章末尾是另一个article的链接,它深入解释了PHP中引用和变量的基础。
总而言之,当通过给出默认值使参考参数成为可选时,PHP'创建'一个新变量,它保存默认值,以防我们不为可选参数提供值。但是,如果我们提供一个,我们必须提供一个变量,参考参数只是一个别名。
答案 7 :(得分:0)
通过引用传递对分配至关重要,有时您不需要检查值是否为$('input[name="products"]').amsifySuggestags({
suggestionsAction : {
timeout: -1,
minChars: 2,
minChange: -1,
type: 'GET',
url: '/sugg',
beforeSend : function() {
console.info('beforeSend');
},
success: function(data) {
console.info('success');
},
error: function() {
console.info('error');
},
complete: function(data) {
console.info('complete');
}
}
});
。这将允许将值(包括未初始化的值)随意分配给变量。
null
在以下代码中很有用:
function f(&$ref = null) {
$ref = 1234;
}
f($x);
echo $x; // 1234
f(); // No error