Interface iterable neakceptuje array ani ArrayHash

MajklNajt
Člen | 470
+
0
-

Zdravím, začal som sa baviť so strict_types a keď mám v nejakej (action/render) metóde type-hint iterable, ktorej potom predávam array alebo ArrayHash, tak dostávam chybu:

Argument $data passed to App\Presenters\SamplePresenter::actionSample() must be iterable, Nette\Utils\ArrayHash given.

resp.

Argument $data passed to App\Presenters\SamplePresenter::actionSample() must be iterable, array given.

Podľa dokumentácie PHP by to ale nemalo robiť problém, keďže Iterable is a pseudo-type introduced in PHP 7.1. It accepts any array or object implementing the Traversable interface. Both of these types are iterable using foreach and can be used with yield from within a generator. (zdroj: http://php.net/…iterable.php)

Pracujem s najnovšími balíčkami Nette 2.4 (nette/application 2.4.12), ktoré by malo byť plne kompatibilné s PHP 7.1, v čom by mohol byť problém?

Editoval MajklNajt (5. 10. 2018 10:42)

Ondřej Kubíček
Člen | 494
+
0
-

a fakt to nespouštíš na php 7.0 ? :))

MajklNajt
Člen | 470
+
0
-

bohužiaľ, fakt nie… spúšťam to na PHP 7.2.10… na 7.0 by mi nešli napr. nullable types alebo void return types

Ondřej Kubíček
Člen | 494
+
0
-

to je divný
v čistém php to funguje, viz. https://3v4l.org/CVXN3, tak že by bug v Nette? si myslím, že za to může ComponentReflection::convertType respektive ComponentReflection::getParameterType, která asi vrátí špatně type

MajklNajt
Člen | 470
+
0
-

áno, sorry, to som zabudol napísať, výnimku vyhadzuje práve ComponentReflection::convertType

edit: teda ComponentReflection::convertType vráti false, na základe čoho sa vyhodí BadRequestException, aby som bol presný…

Editoval MajklNajt (5. 10. 2018 11:36)

MajklNajt
Člen | 470
+
0
-

…ak je to bug, treba to niekde ohlásiť? alebo sa mám zmieriť s tým, že to nebude fungovať?

ping @DavidGrudl