Edit report at https://bugs.php.net/bug.php?id=55701&edit=1
ID: 55701
Updated by: cmb@php.net
Reported by: bs@php.net
Summary: GlobIterator throws LogicException with message 'The
parent constructor was not
Status: Assigned
Type: Bug
Package: SPL related
Operating System: Linux, OSX
PHP Version: 5.3.8
-Assigned To: cataphract
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
I can confirm this behavior with current master.
> This happens when the method is used in constructor prior to
> calling the parent constructor even if the trait method is
> aliased [â¦]
As hanskrentel already explained, this doesn't appear to be a bug.
Anyhow, it's not related to this very issue, so feel free to file
another ticket.
Previous Comments:
------------------------------------------------------------------------
[2016-02-08 10:30:39] axiac dot ro at gmail dot com
Tested on PHP 5.3, 5.4, 5.5, 5.6 and 7.0 on OSX and Ubuntu. It fails the same on all of them.
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$g = new \GlobIterator('/tmp/*.txt');
echo('Before: '.$g->count()."\n");
foreach ($g as $f) {
}
echo('After : '.$g->count()."\n");
If the glob expression matches at least one file it throws the exception on the second call to
count() (line 9). If it doesn't match then it throws on the first call to count() (line 6).
Not only count() throws the exception. All its methods do the same.
------------------------------------------------------------------------
[2016-01-11 16:24:08] pheagey at gmail dot com
Able to reproduce error in 5.5.6 on Ubuuntu 14.04
$iterator = new GlobIterator('./someDir/*');
$iterator->count();
Where 'someDir' has not contents.
------------------------------------------------------------------------
[2014-08-10 10:57:12] hanskrentel at yahoo dot de
Additionally I can not reproduce the original report:
-----------------------------------------------------
<?php
$g = new \GlobIterator(__DIR__ . '/*');
do {
$g->next();
} while($g->valid());
----------------------------------------------------
Works flawlessly for me. Using 5.5.15
------------------------------------------------------------------------
[2014-08-10 10:53:44] hanskrentel at yahoo dot de
SplFileObject checks on method invocation that the state is sane - it does not care whether or not
you have it extended.
Whether or not this qualifies as a bug (I tend to say it isn't a flaw, because SplFileObject
has it's responsibilities and if you extend from it, you're explicitly stating that your
object comes with the same responsibilities, you can not lower the checks).
However, if you actually want to stub the file-object first, that must not stand in your way,
it's easy to work-around, for example with a fake "data://" URI:
<?php
/*
* File: test.php
* Link: https://bugs.php.net/bug.php?id=55701
*/
class MyFileObject extends \SplFileObject
{
public function __construct($file_name)
{
parent::__construct("data://,");
$new_fname = $this->getRealPath();
parent::__construct($file_name);
}
public function getRealPath()
{
return '/tmp/foo.txt';
}
}
$f1 = new MyFileObject(__FILE__);
var_dump($f1->getBasename()); # string(8) "test.php"
------------------------------------------------------------------------
[2014-02-26 14:11:20] log dot kot at gmail dot com
Confirm the bug
Ubuntu Linux 13.10 3.11.0-17-generic x86_64
PHP 5.5.3-1ubuntu2.1 (cli) (built: Dec 12 2013 04:24:35)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=55701
--
Edit this bug report at https://bugs.php.net/bug.php?id=55701&edit=1