问题标签 [spl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
5885 浏览

php - 如何在使用 RecursiveArrayIterator 时更改数组键和值?

我怀疑我在这里做了一些愚蠢的事情,但我对 SPL 的一个简单问题感到困惑:

如何使用RecursiveArrayIterator / RecursiveIteratorIterator修改数组的内容(本例中的值) ?

使用以下测试代码,我可以使用getInnerIterator()offsetSet()更改循环内的值,并在循环内转储修改后的数组。

但是当我离开循环并从迭代器中转储数组时,它又回到了原始值。发生了什么?

0 投票
2 回答
198 浏览

php - __autoload 搞混了?

我有一个有很多客户的服务器,当我开发时,我包含了我的 init.php,其中我有一个__autoloader()函数,其中包含dir_name(__FILE__)."/classes/".$className例如文件。

但是昨天我看到服务器找不到特定的类,我在 apache 上重新启动,然后它又工作了。

每个客户都有自己的 init.php...(因此同一服务器上有许多 __autoloads )

我没有做过一些测试,希望有人能在我尝试重现问题之前回答我的问题,但是您认为当您同时收到 2 个或更多请求时,php 是否有可能采用错误的自动加载功能?

spl_autoload_register 是解决方案吗?

非常感谢您的一些想法或头脑风暴。

0 投票
3 回答
4377 浏览

php - PHP IteratorIterator 类是如何工作的?

尽我所能,我无法理解 IteratorIterator 类的实际作用。我知道类可以实现 Traversable ,因此引擎知道它可以使用 foreach 循环,并且我意识到 IteratorIterator 应该将任何可 Traversable 转换为 Iterator 但我一生无法理解如何。

PDOStatement类为例;如何实现标准迭代器方法(下一个、键、倒带等)以允许对 PDOStatement 进行迭代?

抱歉,如果我的问题不清楚,我只是在努力掌握这门课的确切原因,而且上面的文档很少。

谢谢,

将要

更新:通过 phpt 文件,我发现了一个使用 IteratorIterator 的测试:

预期的输出是:

我并不真正了解 IteratorIterator 构造如何将 $root->child 作为参数以及它如何设法遍历子元素。

0 投票
2 回答
7820 浏览

php - 使用 DirectoryIterator 对文件进行排序

我正在为 lighttpd 创建一个列出 PHP5 脚本的目录。在给定的目录中,我希望能够列出直接的子目录和文件(带有信息)。

经过快速搜索,DirectoryIterator似乎是我的朋友:

但我希望能够按文件名、日期、mime 类型...等对文件进行排序

如何做到这一点(使用 ArrayObject/ArrayIterator?)?

谢谢

0 投票
3 回答
4872 浏览

php - iterator_to_array

DatePeriod是一个用于处理重复日期的 PHP 类。它的方法数量非常有限。因此,当我想使用重复日期执行基本数组函数时,我必须将其复制到带有iterator_to_array. 奇怪的是,复制它似乎会破坏它。任何想法为什么?

0 投票
5 回答
3312 浏览

php - SplObjectStorage 不适用于 String,怎么办?

有人建议使用 SplObjectStorage 来跟踪一组独特的事物。很好,但它不适用于字符串。错误提示“SplObjectStorage::attach() 期望参数 1 是对象,第 59 行的 fback.php 中给出的字符串”

有任何想法吗?

0 投票
2 回答
1417 浏览

php - SPLFileObject next() 行为

在 PHP 中,SPLFileObject 允许将文件视为迭代器。

但是有一种我不理解的行为。当您在对象上调用 next() 时,它会增加 key() 的值,但不会推进文件中的行,除非您在每次迭代时调用 current()。SPL 文档声明 key() 返回当前行号。

重现代码:

测试.txt

迭代器.php

据我所知,下一个不在这部分工作。如果我这样使用它会进步:

iterator_fix.php

谁能解释这是一个错误还是预期的行为?

查看了谷歌和php论坛,没有任何结果。提前致谢。

0 投票
1 回答
4016 浏览

php - PHP array_key_exists() and SPL ArrayAccess interface: not compatible?

I wrote a simple collection class so that I can store my arrays in objects:

Problem: when calling array_key_exists() on this object, it always returns "false" as it seems this function is not being handled by the SPL. Is there any way around this?

Proof of concept:

0 投票
3 回答
6395 浏览

php - 在 SPL 自动加载器中引发异常?

有没有办法从 PHP 中的 SPL 自动加载器抛出异常,以防万一失败?它似乎不适用于 PHP 5.2.11。

调用上述代码时,没有异常迹象,而是得到一个标准的“致命错误:在 bla 中找不到类 'foobarDomain'”。并且脚本的执行终止。

0 投票
2 回答
1722 浏览

php - 在 PHP 中使用 array_search 使对象可搜索

我想在 PHP 中创建一个类,例如它可以使用 PHP 本机方法进行搜索array_search。目前我的班级实现了IteratorAggregateand Countable,这让我可以做foreach它。

还有几个其他 SPL 接口(SeekableIterator、ArrayAccess 等)似乎很合适,但我想知道是否有人已经这样做了,哪个接口适合我想做的事情。

谢谢