|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2008-05-03 16:01 UTC] colder@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 22 16:00:01 2025 UTC |
Description: ------------ RecursiveDirectoryIterator::getChildren uses a hard coded reference to itself in the function getChildren, so it can't be extended. Note: It's not possible to completely overwrite getChildren without a lose of subPath handling. In spl_directory.c: SPL_METHOD(RecursiveDirectoryIterator, getChildren) ... spl_instantiate_arg_ex1(spl_ce_RecursiveDirectoryIterator, &return_value, 0, &zpath TSRMLS_CC); ... This should be changed to something like the RecursiveFilterIterator getChildren uses: spl_instantiate_arg_ex1(Z_OBJCE_P(getThis() ... Reproduce code: --------------- class RecursiveDirectoryIteratorTest extends RecursiveDirectoryIterator { public function test() { echo "test"; } } $di = new RecursiveIteratorIterator(new RecursiveDirectoryIteratorTest ("/somepathwithsubfolders"), RecursiveIteratorIterator::SELF_FIRST); foreach ($di as $key => $value) { echo $key, " - ",$value, $di->test(),"<br>"; } Expected result: ---------------- echoing "test" for each item. Actual result: -------------- Call to undefined method RecursiveDirectoryIterator::test() as soon getChildren creates a new object for a subfolder.