PHP严格错误&和Joomla

时间:2015-11-04 21:34:02

标签: php 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手册的原因,我对它的作用有一些倾向但是我不确定它为什么会这样做 - 我&我#39;我确定我可以删除它并保证安全。

getModel方法在签名中被标记为代理,当然,它在其自身内部使用3个参数调用它,所以我不确定为什么这是一个问题。

非常感谢任何有用的提示或解决方案。

感谢。

1 个答案:

答案 0 :(得分:0)

作为一般规则,我总是建议不要更改供应商代码。通过供应商更新,它可以在未来创建复杂性。考虑符合供应商期望的较低版本的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;
}