PHP Строгие ошибки с & и Joomla

1

Я помогаю клиенту устранять некоторые проблемы, которые, насколько я могу судить, возникли после их обновления до 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 аргументами внутри себя, поэтому я не уверен, почему это проблема.

Любые полезные советы или решения будут высоко оценены.

Благодарю.

  • 0
    Пожалуйста, задайте вопрос по Joomla Stack Exchange , который является специализированным сайтом вопросов и ответов для Joomla
  • 0
    Также, когда вы спросите, пожалуйста, укажите версию.
Показать ещё 1 комментарий
Теги:
joomla

1 ответ

0
Лучший ответ

Как правило, я бы всегда советовал не менять код поставщика. Это может привести к осложнениям в будущем с обновлениями поставщиков. Подумайте, подходит ли более низкая версия PHP, соответствующая ожиданиям поставщиков, или расследовать форкирование исходного хранилища поставщиков, чтобы можно было объединить будущие версии поставщиков.

Чтобы ответить на ваш вопрос: Первая ошибка:

Строгие стандарты PHP: только переменные должны быть назначены по ссылке...

В PHP & часто используется для присвоения псевдонимов по пунктам. Это позволяет использовать элемент, который может быть известен более чем одним именем и иногда может быть полезным. Он также использовался для использования в PHP, чтобы сделать его более эффективным при использовании разных имен для одного и того же элемента, потому что PHP использовался для создания копий каждый раз, когда кому-то присваивалось новое имя.

Эффективность PHP в этом последнем сценарии значительно улучшилась, так как v5 и PHP сильно поощряют использование & для сглаживания только переменных и только тогда, когда это имеет смысл логически для цели кода. Возвращаемое значение функции не может быть псевдонимом, потому что логически это было внутри локальной области функции, которая больше не существует.

Поэтому да, возможно, безопасно заменить =& с = на вызовы функций.

Вторая ошибка:

getModel() должен быть совместим с JController :: getModel ($ name = '', $ prefix = '', $ config = Array)

Это происходит потому, что определения функций не соответствуют родительскому классу. Существует родительский класс, который определяет getModel с тремя аргументами. Это было расширено кодом, который вы опубликовали, который определяет getModel только с двумя аргументами.

Решение состоит в том, чтобы обновить определение функции в соответствии с родительским. Это приведет к тому, что ошибка исчезнет, но также может привести к неправильной работе будущих разработчиков, которые могут ожидать, что эти дополнительные аргументы будут иметь эффект или использовать функцию таким образом, чтобы она не была предназначена; По крайней мере попытайтесь смягчить это, используя зловещие имена аргументов:

public function getModel($name = 'Submission', $prefix = 'AwardAdminModel', $unused = array()) 
{
    $model = parent::getModel($name, $prefix, array('ignore_request' => true));
    return $model;
}
  • 0
    В последнем примере, который я привел, вторым параметром для отображения обычно является $ urlparams, от которого, как мне кажется, Joomla сильно зависит ... Должен ли я передавать True в качестве аргумента каждый раз, когда вызывается display ()? В настоящее время каждый вызов display () на этом клиентском сайте вызывает только один аргумент.
  • 0
    Если вы укажете аргумент по умолчанию в определении функции, вам не нужно будет передавать его каждый раз, когда вызывается функция.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню