我有这个代码
$ITOG=array();
$ex=explode("\n",$TEXT);
foreach ($ex as $line)
{
if (strlen($line)<10){continue;}
if (($line[0]=='#') || ($line[0]=='/' && $line[1]=='/')) {continue;}
$id=sizeof($ITOG);
$ITOG[$id]['_raw']=$line;
$this->analyze($id,&$ITOG);
}
我表示有些人说我必须删除&amp; $并放置$ 是的,它是正确的,它的剂量显示错误 但我的脚本不能在PHP 5.5中工作,但它可以在php 5.2中运行
答案 0 :(得分:1)
您需要更改analyze
功能的定义,以便始终通过引用获取参数2。这背后的想法是,函数每次都应对其数据执行相同的操作。它不应该取决于您是否决定传递变量的副本(按值传递,没有&
)或指向变量本身的指针(传递引用,带{{1 }})。
你应该改变你的功能:
&
这样的事情:
public function analyze($id, $something) {
通过定义时间传递引用,您可以从通话中删除public function analyze($id, &$something) {
:
&
答案 1 :(得分:1)
通过引用传递仍然存在于PHP中,但它已在调用时删除。这意味着以下代码:
function foo($val){
// ...
}
foo(&$val);
必须重构,因为不再支持在调用中通过引用传递。 必须更改为以下内容:
function foo(&$val){
// ...
}
foo($val);
在您的情况下,您必须查找analyze
函数的定义,并在第二个参数前面添加&
,在函数定义中添加,并且在通话时删除它。它应该看起来像:
function analyze($id, &$ITOG){ // ...
...
$this->analyze($id, $ITOG);
答案 2 :(得分:0)
这意味着函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。
从PHP 5.3.0开始,您将收到一条警告,说明&#34;通话时间通过参考&#34;使用&amp;时已弃用在foo(&amp; $ a);.从PHP 5.4.0开始,删除了调用时传递引用,因此使用它会引发致命错误。