gpt4 book ai didi

php - 如何使 Iterator 子类方法观察数组指针函数?

转载 作者:搜寻专家 更新时间:2023-10-31 21:30:38 25 4
gpt4 key购买 nike

标准的 current keynext 函数似乎忽略了 Iterator 子类方法。

在这个例子中,我只是重写了 Iterator::current 方法来返回修改后的字符串。看来我的方法与父类有不同的状态。它无法访问相同的指针,并且在实例上调用 current() 时不会触发。

<?php

class DecoratingIterator extends ArrayIterator {

public function current(){
return '**'.strtoupper( parent::current() ).'**';
}
}

$test = new DecoratingIterator( ['foo','bar'] );

next($test);

echo $test->current(),"\n";
// prints "**FOO**"

echo current($test),"\n";
// prints "bar"

我确定这是预期的行为,但是有没有办法让我的子类方法在调用 PHP 函数时起作用?

最佳答案

此答案需要 APD functions待安装。

原因是 currentkeynext 不是 ArrayIterator 的一部分,甚至如果它们是,您仍然会调用 ArrayIterator::current(),它运行 ArrayIterator 中的原始方法。您需要做的是覆盖函数 current 并指示它使用 override_function 调用您的新函数。 .像这样的东西应该可以做到(注意:我没有测试过)。

rename_function('current', 'original_current');
override_function('current', '$obj', 'return override_current($obj);');
function override_current($obj)
{
if ($obj instanceof DecoratingIterator)
{
return $obj->current();
}
else
{
return original_current($obj);
}
}

关于php - 如何使 Iterator 子类方法观察数组指针函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com