Hanno una soluzione reale in PHP 7.1.
http://php.net/manual/en/migration71.new-features.php#migration71.new-features.iterable-pseudo-type
Il iterabile pseudo-tipo è quello che volete. Qualsiasi array o tipo Traversable, (che è l'interfaccia di base per Iterators) passerà questo controllo.
Ora, per rendere questo chiaro per tutti coloro che vogliono ottenere un super approfondimento, sì, ci saranno casi limite. Dovresti pensare a questi casi limite e risolverli da soli, ma se vuoi assicurarti che se qualcuno passa in un elemento attraversabile a cui non è possibile accedere tramite una chiave, puoi farlo.
http://php.net/manual/en/function.iterator-to-array.php
Ora, indipendentemente da quello che passano nel tipo-suggerimento, si avrà un array, ma questo può rimuovere i vantaggi di utilizzare un generatore per la riduzione della memoria. Dovrebbe essere ovvio, ma a quanto pare non lo è, quindi eccolo qui. Tu, il programmatore, sei responsabile di capire i tuoi casi d'uso specifici per il codice e come stai pensando di usarlo e qual è il caso d'uso appropriato per il codice.
Poiché ciò non è ancora abbastanza chiaro, supponiamo che stiate cercando di passare qualcosa che è tipo-hintable e che si aspetta un particolare metodo o variabile per esistere, quindi si sta facendo una cattiva programmazione. Dovresti implementare un contratto che ha il tipo di reso che stai cercando e lo passa in un tipo piuttosto che generico. Se vuoi fare solo qualcosa di generico come il loop, è a questo che servono i tipi iterabili. Il suggerimento è nel nome: Iterate.
fonte
2017-01-07 04:40:13
Non è la risposta che speravo ma il casting su un array è davvero una buona idea. Grazie – Supericy
Questa è una cattiva pratica, un client non dovrebbe fare ciò che la libreria può fare. – danidacar
La trasmissione di un oggetto all'array non interessa se ArrayAccess è implementato o meno. AFAIK l'unica cosa che cambierà la funzionalità di lancio è la sottoclasse della classe ArrayObject. Speriamo che https://wiki.php.net/rfc/union_types lo faccia un giorno (non correlato al casting ovviamente, ma alla domanda dell'OP);) –