PHP Strict errors with & and Joomla


PHP Strict errors with & and Joomla

据我所知,我正在帮助客户解决更新到PHP 5.5(Joomla目前为2.5.20)后出现的一些问题。这些错误是从Joomla CMS的一些行中抛出的(尽管我不认为这是原因)。不管怎样,这里有一些代码片段和它们各自的错误,我需要帮助:

$app =& JFactory::getApplication();

PHP严格标准:只有变量才能通过引用赋值。。。


public function getModel($name = 'Submission', $prefix = 'AwardAdminModel') 
        {
            $model = parent::getModel($name, $prefix, array('ignore_request' => true));
            return $model;
        }

getModel()应与JController::getModel($name='',$prefix='',$config=Array)兼容


function display($cachable = false) 
    {
        JRequest::setVar('view', JRequest::getCmd('view', 'Submissions'));
        parent::display($cachable);
    }

display()应该与JController::display($cachable=false,$urlparams=false)兼容


现在,我以前从未在我的PHP中使用过"与"符号,但由于PHP手册的缘故,我对它的作用有一些了解,但我不确定它为什么会出现问题——我相信我可以删除它并确保安全。

getModel方法在签名中被标记为代理,当然,它本身有3个参数,所以我不确定为什么会出现问题。

任何有用的提示或解决方案都将不胜感激。

谢谢。

一般来说,我总是建议不要更改供应商代码。它可能会在未来的供应商更新中造成复杂性。考虑是否适合使用与供应商期望相匹配的较低版本的PHP,或者研究分叉供应商源存储库,以便将来的供应商更新可以合并它

要回答您的问题:第一个错误:

PHP严格标准:只有变量才能通过引用赋值。。。

在PHP中,&通常用于为项分配别名。这使得一个可能更改的项目可以通过多个名称进行识别,并且有时会很有用。它也曾在PHP中使用,以提高对同一项目使用不同名称时的效率,因为PHP过去每次为某个项目分配新名称时都会进行复制。

在后一种情况下,PHP的效率得到了显著提高,因为v5和PHP强烈鼓励使用&仅对变量进行别名,并且只有当它在逻辑上对代码有意义时才使用。函数的返回值不能进行别名处理,因为从逻辑上讲,它位于已不存在的函数的本地范围内。

因此,在函数调用中用=替换=&是非常安全的。

第二个错误:

getModel()应与JController::getModel兼容($name=",$prefix='',$config=Array)

出现这种情况是因为函数定义与父类不匹配。有一个父类用3个参数定义getModel。您发布的代码扩展了这一点,该代码仅用两个参数定义了getModel。

解决方案是更新函数定义以匹配父项。这将使错误消失,但也可能误导未来的开发人员,他们可能会期望这些额外的参数产生效果或以非预期的方式使用函数;至少可以通过使用不祥的参数名称来缓解这种情况:

public function getModel($name = 'Submission', $prefix = 'AwardAdminModel', $unused = array()) 
{
    $model = parent::getModel($name, $prefix, array('ignore_request' => true));
    return $model;
}