如何才能保留关键字';克隆';PHP5中的函数是否与PHP7兼容?
PHP7兼容性检查指出了一些PHP5代码中与PHP7不兼容的两个错误 “clone”是PHP 5.0版和 无法作为函数调用(T_CLONE) 如何修复以下代码,使其与PHP7兼容如何才能保留关键字';克隆';PHP5中的函数是否与PHP7兼容?,php,keyword,Php,Keyword,PHP7兼容性检查指出了一些PHP5代码中与PHP7不兼容的两个错误 “clone”是PHP 5.0版和 无法作为函数调用(T_CLONE) 如何修复以下代码,使其与PHP7兼容 /** * Implements {@link aCssMinifierFilter::filter()}. * * @param array $tokens Array of objects of type aCssToken * @return integer Count of added, changed
/**
* Implements {@link aCssMinifierFilter::filter()}.
*
* @param array $tokens Array of objects of type aCssToken
* @return integer Count of added, changed or removed tokens; a return value larger than 0 will rebuild the array
*/
public function apply(array &$tokens)
{
$r = 0;
$transformations = array("-moz-keyframes", "-webkit-keyframes");
for ($i = 0, $l = count($tokens); $i < $l; $i++)
{
if (get_class($tokens[$i]) === "CssAtKeyframesStartToken")
{
for ($ii = $i; $ii < $l; $ii++)
{
if (get_class($tokens[$ii]) === "CssAtKeyframesEndToken")
{
break;
}
}
if (get_class($tokens[$ii]) === "CssAtKeyframesEndToken")
{
$add = array();
$source = array();
for ($iii = $i; $iii <= $ii; $iii++)
{
$source[] = clone($tokens[$iii]);
}
foreach ($transformations as $transformation)
{
$t = array();
foreach ($source as $token)
{
$t[] = clone($token);
}
$t[0]->AtRuleName = $transformation;
$add = array_merge($add, $t);
}
if (isset($this->configuration["RemoveSource"]) && $this->configuration["RemoveSource"] === true)
{
array_splice($tokens, $i, $ii - $i + 1, $add);
}
else
{
array_splice($tokens, $ii + 1, 0, $add);
}
$l = count($tokens);
$i = $ii + count($add);
$r += count($add);
}
}
}
return $r;
}
}
/**
*实现{@link aCssMinifierFilter::filter()}。
*
*@param array$tokens类型的对象数组aCssToken
*@返回添加、更改或移除令牌的整数计数;大于0的返回值将重建数组
*/
应用公共函数(数组和$tokens)
{
$r=0;
$transformations=数组(“-moz关键帧”,“-webkit关键帧”);
对于($i=0,$l=count($tokens);$i<$l;$i++)
{
if(get_类($tokens[$i])==“cssatKeyframessStartToken”)
{
对于($ii=$i;$ii<$l;$ii++)
{
if(get_类($tokens[$ii])==“CssAtKeyframesEndToken”)
{
打破
}
}
if(get_类($tokens[$ii])==“CssAtKeyframesEndToken”)
{
$add=array();
$source=array();
对于($iii=$i;$iii AtRuleName=$transformation;
$add=array\u merge($add,$t);
}
if(设置($this->configuration[“RemoveSource”])&&&$this->configuration[“RemoveSource”]==true)
{
阵列拼接($tokens,$i,$ii-$i+1,$add);
}
其他的
{
数组拼接($tokens,$ii+1,0,$add);
}
$l=计数($tokens);
$i=$ii+计数($add);
$r+=计数($add);
}
}
}
返回$r;
}
}
因此,代码似乎正在尝试克隆对象。但是,在方法周围有括号
代码应该是
$t[] = clone $token;
clone
本身不是一个函数,它是一个调用对象的\uu clone
方法的函数您的项目中是否有任何函数名clone()
,或者它是php内置的clone
?将clone
重命名为其他$source[]=clone($iii]);
clone()定义的函数
@Sohel0415嘿,我错了。时间不早了;我想我最好今晚把它挂起来。虽然这段代码片段可能会解决这个问题,但确实有助于提高你的文章质量。请记住,你是在将来为读者回答这个问题,而那些人可能不知道你的代码建议的原因。也请尽量不要使用c在代码中添加解释性注释,因为这会降低代码和解释的可读性!这对我很有效。删除将克隆标记为函数的参数,以便将其视为关键字。在第3346行中更改:$source[]=clone($tokens[$iii]);
更改为:$source[]=clone$tokens[$iii]第3353行中的
更改:$t[]=clone($token);
为:$t[]=clone$token;