Обновление
**********
Обновление до версии 4.0
========================
Минимальная требуемая версия PHP - 8.0.
Класс `Nette\Utils\Reflection` предоставлял для работы с типами методы `getParameterType()`, `getPropertyType()` и `getReturnType()`. Эти методы появились тогда, когда в PHP ещё не было объединённых, пересекающихся и новейших типов в дизъюнктивной нормальной форме, с которыми они уже не работают правильно. Их заменил [класс Type |type]. Начиная с версии 4.0 эти методы удалены.
Переменная `Nette\Utils\Html::$xhtml` удалена.
Флаги в некоторых методах заменены именованными аргументами. Прежняя запись ещё работает, но больше не является предпочтительной: `Json::PRETTY` → `pretty:`, `Json::ESCAPE_UNICODE` → `asciiSafe:`, `Json::FORCE_ARRAY` → `forceArrays:`, `PREG_GREP_INVERT` в `Arrays::grep()` → `invert:`, `Image::SHRINK_ONLY` в `Image::resize()` → `shrinkOnly:`, а также флаги `PREG_*` в `Strings::split()`, `match()` и `matchAll()`.
Метод `Nette\Utils\Reflection::getParameterDefaultValue()` объявлен устаревшим, потому что нативный `ReflectionParameter::getDefaultValue()` уже работает правильно.
Если вы используете RobotLoader, обновите и его до версии 4.
Finder
------
Finder переехал в пакет `nette/utils`. Удалите исходный пакет `nette/finder`:
```shell
composer remove nette/finder
```
В Linux Finder теперь по умолчанию работает с учётом регистра.
В предыдущей версии методы `exclude()` и `filter()` вели себя по-разному в зависимости от того, вызывались ли они **до** или **после** `from()` либо `in()`. Больше это не так: `exclude()` и `filter()` всегда работают одинаково. Поведение `filter()`, вызванного *после* `from()`/`in()`, теперь обеспечивает новый метод `descentFilter()`.
Finder больше не реализует интерфейс `Countable`.
Строка, начинающаяся со слеша, в `Finder::findFiles('/f*')` теперь считается абсолютным путём. Если вы имели в виду относительный путь от текущего каталога, замените его, например, на `Finder::findFiles('./f*')`.
Если каталог, в котором вы ищете, не существует, выбрасывается `Nette\InvalidStateException` (вместо прежнего `UnexpectedValueException`).
О том, что ещё умеет переписанный Finder, рассказывает статья [Finder 4.0: 10 лет опыта под капотом |https://blog.nette.org/en/finder-4-10-years-of-experience-under-the-hood].
Обновление до версии 3.1
========================
- `Nette\Utils\Arrays::searchKey()` переименован в `getKeyOffset()`
- `Nette\Utils\Callback::closure()` объявлен устаревшим в пользу `Closure::fromCallable()`
- `Nette\Utils\Reflection::toString()` добавляет `()` после имени функции или метода
- `Nette\Utils\Strings::toAscii()` выдаёт notice, если отсутствует ext-intl
Обновление до версии 3.0
========================
Интерфейс `Nette\Localization\ITranslator` изменился.
`Nette\Object` объявлен устаревшим начиная с Nette 2.4 и удалён в Nette 3.0, но он по-прежнему существует под новым именем `Nette\LegacyObject` (имя `object` использовать нельзя начиная с PHP 7.1) в пакете [nette/deprecated |https://github.com/nette/deprecated].
Обновление до версии 2.4
========================
Классы фреймворка теперь используют трейт `Nette\SmartObject` вместо наследования от `Nette\Object`, что отличается в нескольких случаях:
- он поддерживает "эмулируемые свойства" только при наличии аннотации `@property type $name`
- он не поддерживает "методы расширения"
- он не поддерживает "getReflection"
- он не поддерживает получение методов вида `$this->formSubmitted`; используйте вместо этого классический callback PHP `[$this, 'formSubmitted']`
Метод `Nette\Utils\Html::add()` заменён методами `addHtml()` и `addText()`.
Обновление до версии 2.3
========================
- `Image::from()` выбрасывает `ImageException`, когда не может декодировать файл
- `Image::getFormatFromString()` объявлен устаревшим
- `Strings::chr()` и `normalize()` теперь работают только с кодировкой UTF-8
- `Strings::chr()` выбрасывает `Nette\InvalidArgumentException`, если код символа выходит за допустимый диапазон
Обновление
Обновление до версии 4.0
Минимальная требуемая версия PHP – 8.0.
Класс Nette\Utils\Reflection предоставлял для работы с типами методы
getParameterType(), getPropertyType() и getReturnType(). Эти методы
появились тогда, когда в PHP ещё не было объединённых, пересекающихся и
новейших типов в дизъюнктивной нормальной форме, с которыми они уже не
работают правильно. Их заменил класс Type.
Начиная с версии 4.0 эти методы удалены.
Переменная Nette\Utils\Html::$xhtml удалена.
Флаги в некоторых методах заменены именованными аргументами.
Прежняя запись ещё работает, но больше не является предпочтительной:
Json::PRETTY → pretty:, Json::ESCAPE_UNICODE → asciiSafe:,
Json::FORCE_ARRAY → forceArrays:, PREG_GREP_INVERT в Arrays::grep() →
invert:, Image::SHRINK_ONLY в Image::resize() → shrinkOnly:, а также
флаги PREG_* в Strings::split(), match() и matchAll().
Метод Nette\Utils\Reflection::getParameterDefaultValue() объявлен устаревшим, потому
что нативный ReflectionParameter::getDefaultValue() уже работает правильно.
Если вы используете RobotLoader, обновите и его до версии 4.
Finder
Finder переехал в пакет nette/utils. Удалите исходный пакет
nette/finder:
composer remove nette/finder
В Linux Finder теперь по умолчанию работает с учётом регистра.
В предыдущей версии методы exclude() и filter() вели себя
по-разному в зависимости от того, вызывались ли они до или после
from() либо in(). Больше это не так: exclude() и filter()
всегда работают одинаково. Поведение filter(), вызванного после
from()/in(), теперь обеспечивает новый метод
descentFilter().
Finder больше не реализует интерфейс Countable.
Строка, начинающаяся со слеша, в Finder::findFiles('/f*') теперь
считается абсолютным путём. Если вы имели в виду относительный путь от
текущего каталога, замените его, например, на Finder::findFiles('./f*').
Если каталог, в котором вы ищете, не существует, выбрасывается
Nette\InvalidStateException (вместо прежнего UnexpectedValueException).
О том, что ещё умеет переписанный Finder, рассказывает статья Finder 4.0: 10 лет опыта под
капотом.
Обновление до версии 3.1
Nette\Utils\Arrays::searchKey() переименован в getKeyOffset()
Nette\Utils\Callback::closure() объявлен устаревшим в пользу
Closure::fromCallable()
Nette\Utils\Reflection::toString() добавляет () после имени функции
или метода
Nette\Utils\Strings::toAscii() выдаёт notice, если отсутствует ext-intl
Обновление до версии 3.0
Интерфейс Nette\Localization\ITranslator изменился.
Nette\Object объявлен устаревшим начиная с Nette 2.4 и удалён в Nette 3.0, но
он по-прежнему существует под новым именем Nette\LegacyObject (имя
object использовать нельзя начиная с PHP 7.1) в пакете nette/deprecated.
Обновление до версии 2.4
Классы фреймворка теперь используют трейт Nette\SmartObject вместо
наследования от Nette\Object, что отличается в нескольких случаях:
- он поддерживает “эмулируемые свойства” только при наличии
аннотации
@property type $name
- он не поддерживает “методы расширения”
- он не поддерживает “getReflection”
- он не поддерживает получение методов вида
$this->formSubmitted;
используйте вместо этого классический callback PHP [$this, 'formSubmitted']
Метод Nette\Utils\Html::add() заменён методами addHtml() и
addText().
Обновление до версии 2.3
Image::from() выбрасывает ImageException, когда не может
декодировать файл
Image::getFormatFromString() объявлен устаревшим
Strings::chr() и normalize() теперь работают только с
кодировкой UTF-8
Strings::chr() выбрасывает Nette\InvalidArgumentException, если код символа
выходит за допустимый диапазон