8

行きたいところに行けるけど、一番きれいな道が欲しい。

私をここに導いたのは、$dom->getElementsByTagName()orのようなオブジェクトのコレクションを返す関数を実行する最良の方法を研究し、$pdo->query('SELECT itcher FROM scratches')結果が 1 つしかないことを知って、その結果にアクセスすることでした。

私はいくつかの調査を行いましたが、知っておくべきことはすべて知っていることを知りたいです。

foreachまたは、複数のものを反復するものはすべて、美的観点からばかげていると感じました。それを配列にキャストするのは傷のように感じます。コードに取り掛かりたいと思います。私がこれまでに最も気に入ったのは、私が見つけたものに$object->{'0'}近いためですが、すべての場合に機能するとは限りません. $object[0]もっときれいに見えるものはありますか?たとえばforeach($key as $val)、$key を $val に設定すると、各反復で正確に何が行われるのでしょうか? 私はそれを自分で行うことができますか?

オブジェクトの概念を頭の中で適切に視覚化していないのかもしれませんがgetElementsByTagName、mysql クエリが配列を返す方が理にかなっているのではないでしょうか? なぜ彼らはしないのですか?

4

1 に答える 1

3

たとえば、$key を $val に設定するとき、foreach($key as $val) は反復ごとに正確に何をしているのでしょうか? 私はそれを自分で行うことができますか?

本当に配列の場合は、 で最初の要素を取得できますreset()

Iterator(オブジェクトへのアクセスを許可するために使用される)の場合foreach、使用できるはずです$object->current();

foreachの基礎となるコードを実際reset()に見たことはありませんが、反復の開始時に「行う」current()ことと類似しているようです。foreach

残念ながら、参照する 2 つの例は内部クラスであり、ドキュメントによると内部クラス (言語または拡張機能の一部であるクラス) は同じ規則に従っていません。

このインターフェースを実装する内部 (組み込み) クラスは、foreach コンストラクトで使用でき、IteratorAggregate または Iterator を実装する必要はありません。

そうは言っても、反復可能なオブジェクトを返すユーザー クラスは(必要な)型foreachである必要があるため、希望どおりに動作するはずです。オブジェクトがの代わりに実際に実装する場合は、 を使用する必要があることに注意してください。Traversableforeachcurrent()IteratorAggregateIteratorgetIterator()->current()

ただし、返された型に固有のメソッドを使用するだけで、2つの例を実行することはまだ可能です。の場合は をgetElementsByTagName()getElementsByTagName->item(0)PDO の場合は を使用できますquery()->fetch()

于 2012-11-17T04:27:25.267 に答える