Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Я считаю, что сомнительно сказать, что вы развиваетесь с использованием новейшего PHP и работаете с очень устаревшей версией. Из этого возникнет множество возможных проблем, а не только из-за исправлений безопасности, которые вам не хватает, но что еще более важно из-за исправлений PHP-ошибок, которые были введены в основном в версиях 5.3.9 и 5.3.23, что изменяет поведение PHP в некоторых подробности довольно принципиально. Не говоря уже о риске случайного использования функций 5.4 или 5.5.
И действительно, нет способа заставить Composer справиться с этой ситуацией. Версия PHP, используемая при запуске composer update
, определяет разрешение зависимостей, на которые влияет PHP-версия и установленные расширения PHP.
Вы не можете определить, что пакет должен использоваться только для версий PHP между 5.3. 3 и 5.3.5, если PHP, который вы используете для обновления, не соответствует этой потребности в версии. Поскольку используемая версия PHP превышает ограничение на верхнюю версию, такой пакет не подходит для выполнения требования к версии, а Composer сообщает, что пакет не найден (не сообщая, что он видел пакеты, но их нужно было игнорировать из-за ограничение версии).
Есть, вероятно, три очевидных выхода:
composer update
, и все готово. composer config -g platform.php 5.3.5
для глобальной настройки (будет влиять на все последующие запуски Composer), без -g
для локальной настройки (будет влиять только на операции Composer в этом проекте, если вы разрабатываете более чем один проект с разными производственными версиями PHP). Как насчет попытки оператора тильды
Tilde Operator ~ 1.2 Очень полезно для проектов, которые следуют за семантическим управлением версиями. ~ 1.2 эквивалентно> 1.2, 2.0. Более подробно см. Следующий раздел ниже.
blockquote>Следующая значимая версия (оператор Тильды) #
Оператор ~ лучше всего объясняется примером: ~ 1.2 эквивалентен
= 1.2, & lt; 2,0, тогда как ~ 1.2.3 эквивалентно> = 1.2.3, 1.3. Как вы можете видеть, это в основном полезно для проектов, связанных с семантическим версированием. Общее использование будет означать минимальную младшую версию, на которую вы зависите, например ~ 1.2 (что позволяет все, вплоть до 2.0, но не включая). Поскольку теоретически не должно быть обратных разрывов совместимости до 2.0, это хорошо работает. Другой способ взглянуть на это состоит в том, что использование ~ указывает минимальную версию, но позволяет увеличить указанную последнюю цифру.
blockquote>Примечание. Хотя 2.0-бета-1 строго до 2.0, ограничение версии, как ~ 1.2, не будет устанавливать его. Как сказано выше, 1.2 означает, что .2 может измениться, но 1. часть зафиксирована.
Примечание. Оператор ~ имеет исключение по своему поведению для основного номера выпуска. Это означает, например, что ~ 1 совпадает с ~ 1.0, поскольку он не позволит увеличить большее число, пытаясь сохранить обратную совместимость.
Удалите каталог composer.lock и vendor .
Теперь установите platform на композитор. json
"config": {
"platform": {
"php": "7.0"
}
},
и, наконец, выполнить команду composer install
Попробуйте это (удалите запятую):
"require": {
"php": ">=5.3.3 <=5.3.5",
.....
},
Поскольку параметр конфигурации в composer.json доступен. Вы могли бы что-то вроде этого:
{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}
config.platform.php
предназначена для решения именно этой проблемы в этом вопросе, и она работает. Возможно, используемая версия композитора еще не поддерживала его.
– Narretz
14 November 2017 в 14:10
composer update
, как и любые другие изменения, связанные с зависимостью, с composer.json
.
– Evan Mattson
30 May 2018 в 15:55
composer.lock
? – Arcesilas 30 November 2017 в 22:31