PHP引用赋值警告解惑:为何obtaino函数被视为按引用调用?
解惑:PHP引用赋值警告的核心问题
你疑惑的点其实是混淆了函数参数引用和返回值引用赋值两个完全不同的PHP概念,咱们一步步拆解清楚:
警告的真实含义
你看到的PHP Notice: Only variables should be assigned by reference,根本不是在说obtaino函数的第二个参数需要按引用传递——它针对的是你这行代码里的赋值方式:
$the_mainrdn = &obtaino($zogcn,'mainrdn');
这里的&符号是试图把obtaino函数的返回值(一个临时的表达式结果)以引用赋值的方式绑定给$the_mainrdn,但PHP的语法规则明确要求:只有变量才能被引用赋值,临时值(比如函数返回值、字面量)不能作为引用的目标。
为什么你会误解?
你误以为警告和函数参数有关,但实际上obtaino函数的参数定义是完全没问题的:
function obtaino ( $the_xcont, $the_clnom ) { $awesome_dom = new DOMDocument(); $awesome_dom->loadHTML($the_xcont); // ...其他逻辑 return $awesome_bdv; }
这里的参数是按值传递,和警告没有任何关系。问题完全出在你给变量赋值时多写的那个&符号上。
快速解决方法
直接去掉赋值语句里的&,改成普通的变量赋值即可:
$the_mainrdn = obtaino($zogcn,'mainrdn');
这样PHP就不会再抛出这个警告了,因为你现在是把函数的返回值直接赋值给变量,完全符合语法规则。
额外补充:PHP版本的影响
在PHP 5.3之前,$var = &func()这种写法可能只是被官方不推荐,但从PHP 5.3开始,它会明确抛出你看到的通知级警告;到了PHP 7+,这种写法甚至会直接触发错误,所以这种用法早就该被摒弃了。
内容的提问来源于stack exchange,提问作者Sophia_ES
相关产品推荐
相关产品推荐

