让我在这里的是研究运行函数的最佳方法,该函数返回一组对象,如$dom-> getElementsByTagName()或$pdo-> query(‘SELECT itcher FROM scratches’)然后 – 知道它将会只有一个结果 – 访问该结果.
我做了一些研究,但我想知道我知道所有的知识.
foreach或任何迭代过多事的东西从审美观点来看都是愚蠢的,因为我知道只有一个.将它投射到一个阵列感觉就像一个瑕疵,我想要开始我的代码.到目前为止我最喜欢的是$object-> {‘0’},因为它与我发现的$object [0]一样接近,但它似乎并不适用于所有情况.有什么东西比较漂亮吗?例如,在将$key设置为$val时,foreach($key as $val)在每次迭代时做了什么?我可以自己做吗?
也许我不是在想象中正确地想象一个对象的想法,但是getElementsByTagName和mysql查询返回数组会不会更有意义?他们为什么不呢?
For instance,what exactly is foreach($key as $val) doing on each iteration when it sets a $key to $val? Can I do that myself?
如果它确实是一个数组,你可以使用reset()获得第一个元素.
如果它是迭代器(用于允许foreach访问对象),那么你应该能够使用$object-> current();
我从来没有真正看过foreach的底层代码 – 但是reset()和current()似乎类似于foreach在迭代开始时会“做”的东西.
不幸的是,您引用的两个示例是内部类,而according to the docs内部类(作为语言或扩展的一部分的类)不遵循相同的规则:
Internal (built-in) classes that implement this interface can be used in a foreach construct and do not need to implement IteratorAggregate or Iterator.
也就是说,任何返回可以由foreach迭代的对象的用户类都应该是Traversable类型(foreach需要的),所以我相信current()应该按照你想要的方式工作.请注意,如果对象实际上实现了IteratorAggregate而不是Iterator,则必须使用getIterator() – > current().
但是,仍然可以使用两个示例 – 只使用特定于返回类型的方法.在getElementsByTagName()的情况下,您可以使用getElementsByTagName-> item(0),在PDO的情况下,您可以使用query() – > fetch().