アップグレード
*******
バージョン 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:`、`Arrays::grep()` の `PREG_GREP_INVERT` → `invert:`、`Image::resize()` の `Image::SHRINK_ONLY` → `shrinkOnly:`、そして `Strings::split()`、`match()`、`matchAll()` の `PREG_*` フラグです。
ネイティブの `ReflectionParameter::getDefaultValue()` がすでに正しく動くため、`Nette\Utils\Reflection::getParameterDefaultValue()` メソッドは非推奨です。
RobotLoader を使っている場合は、それもバージョン 4 に更新してください。
Finder
------
Finder は `nette/utils` パッケージに移りました。もとの `nette/finder` パッケージは削除してください。
```shell
composer remove nette/finder
```
Linux では、Finder は既定で大文字小文字を区別するモードで動くようになりました。
以前のバージョンでは、`exclude()` と `filter()` メソッドは `from()` や `in()` の**前**に呼ばれたか**あと**に呼ばれたかで振る舞いが違いました。もうそうではなく、`exclude()` と `filter()` は常に同じように働きます。`from()`/`in()` の*あと*に呼ばれた `filter()` の振る舞いは、新しいメソッド `descentFilter()` が担当します。
Finder はもう `Countable` インターフェースを実装しません。
`Finder::findFiles('/f*')` のようにスラッシュで始まる文字列は、絶対パスとみなされるようになりました。現在のディレクトリからの相対パスのつもりなら、たとえば `Finder::findFiles('./f*')` に置き換えてください。
検索対象のディレクトリが存在しない場合、(以前の `UnexpectedValueException` ではなく)`Nette\InvalidStateException` が投げられます。
書き直された Finder にほかに何ができるかは、記事 [Finder 4.0: 10 years of experience under the hood |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()` は ext-intl がないときに notice を出します
バージョン 3.0 へのアップグレード
===================
`Nette\Localization\ITranslator` インターフェースが変わりました。
`Nette\Object` は Nette 2.4 から非推奨で Nette 3.0 で削除されましたが、[nette/deprecated |https://github.com/nette/deprecated] パッケージの中に新しい名前 `Nette\LegacyObject` として残っています(PHP 7.1 以降、`object` という名前は使えません)。
バージョン 2.4 へのアップグレード
===================
フレームワークのクラスは `Nette\Object` を継承する代わりに `Nette\SmartObject` トレイトを使うようになりました。いくつかの点で異なります。
- 「疑似プロパティ」は、アノテーション `@property type $name` がある場合にだけ対応します
- 「拡張メソッド」には対応しません
- 「getReflection」には対応しません
- `$this->formSubmitted` のようにメソッドを取得することには対応しません。代わりに従来の 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:、Arrays::grep() の PREG_GREP_INVERT →
invert:、Image::resize() の Image::SHRINK_ONLY → shrinkOnly:、そして
Strings::split()、match()、matchAll() の PREG_* フラグです。
ネイティブの ReflectionParameter::getDefaultValue()
がすでに正しく動くため、Nette\Utils\Reflection::getParameterDefaultValue()
メソッドは非推奨です。
RobotLoader を使っている場合は、それもバージョン 4 に更新してください。
Finder
Finder は nette/utils パッケージに移りました。もとの nette/finder
パッケージは削除してください。
composer remove nette/finder
Linux では、Finder は既定で大文字小文字を区別するモードで動くようになりました。
以前のバージョンでは、exclude() と filter() メソッドは from() や
in()
の前に呼ばれたかあとに呼ばれたかで振る舞いが違いました。もうそうではなく、exclude()
と filter() は常に同じように働きます。from()/in()
のあとに呼ばれた filter() の振る舞いは、新しいメソッド descentFilter()
が担当します。
Finder はもう Countable インターフェースを実装しません。
Finder::findFiles('/f*')
のようにスラッシュで始まる文字列は、絶対パスとみなされるようになりました。現在のディレクトリからの相対パスのつもりなら、たとえば
Finder::findFiles('./f*') に置き換えてください。
検索対象のディレクトリが存在しない場合、(以前の UnexpectedValueException
ではなく)Nette\InvalidStateException が投げられます。
書き直された Finder にほかに何ができるかは、記事 Finder 4.0: 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() は ext-intl がないときに notice を出します
バージョン 3.0 へのアップグレード
Nette\Localization\ITranslator インターフェースが変わりました。
Nette\Object は Nette 2.4 から非推奨で Nette 3.0 で削除されましたが、nette/deprecated パッケージの中に新しい名前
Nette\LegacyObject として残っています(PHP 7.1 以降、object
という名前は使えません)。
バージョン 2.4 へのアップグレード
フレームワークのクラスは Nette\Object を継承する代わりに Nette\SmartObject
トレイトを使うようになりました。いくつかの点で異なります。
- 「疑似プロパティ」は、アノテーション
@property type $name
がある場合にだけ対応します
- 「拡張メソッド」には対応しません
- 「getReflection」には対応しません
$this->formSubmitted
のようにメソッドを取得することには対応しません。代わりに従来の 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 を投げます