我有这个代码
$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);
}
我展示了一些人说我必须删除&$和地点$是的,它是正确的,而且没有显示错误但我的脚本在php5.5中不起作用,但在php5.2中起作用
您需要更改analyze
函数的定义,使其始终引用参数2。这背后的想法是,一个函数每次都应该对其数据做同样的事情。它不应该取决于您决定传递变量的副本(按值传递,不带&
)还是指向变量本身的指针(按引用传递,带&
)。
你应该改变你的功能,从这样的东西:
public function analyze($id, $something) {
类似的东西:
public function analyze($id, &$something) {
通过使其通过引用定义时间,您可以从呼叫中删除&
:
$this->analyze($id, $ITOG);
PHP中仍然存在引用传递,但在调用时已将其删除。这意味着以下代码:
function foo($val){
// ...
}
foo(&$val);
必须重构,因为不再支持在调用中通过引用传递。必须将其更改为以下内容:
function foo(&$val){
// ...
}
foo($val);
在您的情况下,必须查找analyze
函数的定义,并在函数定义中的第二个参数前面添加&
,然后在调用时将其删除。它应该看起来像:
function analyze($id, &$ITOG){ // ...
...
$this->analyze($id, $ITOG);
这意味着函数调用上没有引用号,只在函数定义上。仅函数定义就足以通过引用正确传递参数。
从PHP 5.3.0开始,当您使用&在foo(&$a);中;。从PHP 5.4.0开始,通过引用传递调用时间被删除,因此使用它将引发致命错误。