问题标签 [php-generators]
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.
php - 重构比较/运算符块以干燥并降低 CRAP 级别
我着手围绕一组返回生成器的类(php 5.5)制作一个小项目。
这个小项目的主要动机是扩展我的 TDD 之旅,摆弄生成器,并有一个我可以扔到 packagist 上供以后使用的包。
整个“项目”的当前状态可以在Github找到
所有测试都是绿色的,方法可以满足我的要求。现在我想重构,因为我有很多重复。
该类还有一个名为 getOdd 的方法(是的,它看起来很像;))
主要的重复是闭包$Generator = function() ...
,不同之处主要在于 for 循环中的运算符+ - * /
和参数。这在其余班级中基本相同。
我阅读了 PHP 中的动态比较运算符,得出的结论是没有像这样的本地方法compare(...)
我是否应该使用私有/受保护的方法进行比较。如果是这样,我应该为此创建一个新的类/函数吗?我认为它不属于当前班级。
我还缺少其他东西吗,我不确定如何以适当的方式将其干燥?
顺便提一句。知道一个 getEven,当我得到一个带有 step 函数的 getRange 时,getOdd 有点傻,但这是一个更一般的重构/模式问题。
更新 @github,getEven 和 getOdd 现在已被删除...
php - 使用 while 迭代生成器
我正在为一个新项目编写 PDO 包装器。SQL 的一个非常常见的模式是编写一个语句,例如
我的包装函数本质上是这样的:
但是如果我使用while
上面的循环调用它,我就不能使用这些值。做一个var_dump
说那$row
是一个生成器对象。如果我使用 a foreach
, avar_dump
按预期显示数据库数据。是根本不可能使用 遍历生成器while
,还是我在这里把自己弄糊涂了?
php - 高效的 PHP 算法生成输入的所有组合/排列
我正在尝试为多个输入计算数组中一组值的所有组合。类似于这个问题:
例如:
输出:
但问题是当我将其增加到更大的列表时,例如:
排列的数量急剧增加,PHP 内存不足。显然,解决方案是使用生成器并在整个循环过程中产生结果。生成器的唯一示例是针对略有不同的问题集:
请参阅: https ://stackoverflow.com/a/27160465/345086
关于如何使用生成器来解决这个问题的任何想法?
php - 更容易的菜单生成取决于会话
我正在为网站语言制作一个菜单,它可以工作,但我认为我这样做的方式并不是最好的方式,以防我将来添加更多语言。也许有人可以举一个更好的例子。这是我所拥有的。
做一些数组和 foreach 函数可能会更好,但我不知道如何做那个 x,x 太令人困惑了
php - 将 php yield / Generator::send() 用于“数据输出流”
我知道 yield 可用于创建数据迭代器,例如从 CSV 文件中读取数据。
但是 Generator::send() 方法表明我可以对顺序写入执行相同的操作,而不是读取。
例如,我想使用这样的东西:
我认为上述方法会起作用。
但是$output_generator->send(null);
对于关闭似乎是错误的,或者不理想。这意味着我永远不能发送文字空值。这对于 csv 写入是可以的,但也许有一个发送 null 的用例。
有没有使用 php 生成器进行顺序编写的“最佳实践”?
php - php生成具有最小值和最大值的10的倍数的随机数
我想在最小和最大条件下生成 10 的随机数。示例 10、40、20、100、60。10 到 100 之间的数字
php - 在哪里可以找到 Phprunner 查询日志?
我有一个由Phprunner生成的项目。有些页面响应很慢。然后我想我必须以某种方式检查生成和执行的查询。我试过搜索低谷代码,我发现了很多执行函数。我不知道哪一个是正确的执行点。
我正在使用Phprunner 9.0、Php 5.6 和 MySQL。
我在哪里可以找到日志文件或放置记录器的正确位置?
php - 同一个生成器上的多个循环 - PHP
我需要在多个循环上循环同一个生成器 - 我尝试使用倒带,但出现此错误 - “无法倒带已经运行的生成器”。
php - 如何确定生成器是否通过引用产生?
我正在编写一个通用组件,它包装了一个生成器并进行常规操作:
- 按键过滤
- 转换价值
- 等等
为了尽可能接近地模拟包装的生成器,如果生成器正在使用引用,我想使用引用。
当我尝试使用方法迭代非参考生成器foreach ($generator as $key => &$value)
时,我收到以下错误:
如果它声明它产生按引用,则只能迭代一个生成器按引用
有没有办法找出手头的生成器是否正在返回引用?我没有成功使用反射:
此外,不使用构造的迭代生成器foreach
根本不适用于引用: