Так что я хочу, чтобы расширить, например, это RecursiveIterator from the SPL с функцией каждого, так что я могу легко идти по объекту/массивКак передать переменную по ссылке при создании объекта в PHP
class it extends RecursiveArrayIterator {
public function each($function, $args=array()){
$args = (sizeof($args)>0) ? array_merge(array($this),(array)$args) : array($this);
iterator_apply($this, $function, $args);
return $this;
}
}
//Running it:
$it = new it(&$array);
$it->each(function($it){
$it->offsetSet($it->key(), $it->current() + 1);
return true;
});
что приводит к:
Запрещены: время вызова перейти по ссылке устарела в ...
проблема в том, я не могу, или не должны использовать ссылку, когда creati объект, потому что он лишен. Но когда итерации по массиву/объекту я хочу иметь возможность вносить в него изменения, как я могу достичь этого, не меняя allow_call_time_pass_reference
на On
? Я использую wamp с php 5.3.
имеют хороший день
1: http://www.php.net/manual/en/class.recursivearrayiterator.phpin ...
Вы можете использовать 'each' метод при расширении' RecursiveArrayIterator'? У меня сложилось впечатление, что вы унаследовали предыдущие методы, и в этом случае «каждый» не является одним из них, в соответствии с: http://www.php.net/~helly/php/ext/spl/classRecursiveArrayIterator.html –
@Russell: вы можете не только перезаписывать, но и добавлять методы в производные классы (в противном случае не было бы класса с большим количеством методов, чем StdClass, который имеет 0 методов ;-)) – VolkerK
Извините, это было просто недоразумение с моей стороны. По какой-то причине я думал, что он реализует, а не расширяется из «РекурсивныйArrayIterator». Спасибо за разъяснения! –