我有一个函数,它将变量作为参考:
function get_articles($limit = 10, &$more = false){
$results = get_results_from_db($limit);
$more = ($results->found > $limit) ? $results->found : false;
return $results->data;
}
我使用它像:
$articles = get_articles(10, $more_results);
foreach($articles as $article){
// do stuff
}
if($more_results) // we have more than 10 results
但我没有收到通知,告诉我上面的$more_results
未定义......
这是正常的吗?
答案 0 :(得分:3)
这很正常。
仅为读取访问生成未定义的变量通知。当您通过引用传递参数时,它无异于隐含的写入访问。
$articles = get_articles(10, $more_results);
// $more_results = NULL; because of & here
在函数调用之前,变量(除非存在)将被初始化为NULL
,以便能够生成对该zval的引用。
如果未将变量作为第二个参数传递,则函数签名的= false
默认值将仅分配给其内部参数。 (您的示例稍后会将其指定为值。)
答案 1 :(得分:1)
是的,因为$more_results
始终至少定义false
值(调用函数后)。
内部函数变量将不会被定义,但由于您没有读取变量的内容,因此不会生成通知。
答案 2 :(得分:1)
我在某处读到这是正常行为。如果引用的var不存在,Php将始终创建一个var。现在试着找到它,但你可以阅读下面的文章,了解为什么不在php中使用引用。
http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html