2013-01-21 21 views
1

我有一个扩展SplFileObject并实现__toString方法的类,但我似乎得到不一致的行为,具体取决于如何调用该方法。有时会调用父方法,有时候会使用子方法。谁能解释为什么会发生这种情况?SplFileObject __toString继承

class Something extends \SplFileObject { 
    public function __toString() { 
     return 'calling __toString'; 
    } 
} 

$something = new Something('test.php'); 
echo $something; // 'calling __toString' 
echo (string) $something; // 'test.php' 
echo $something->__toString(); // 'calling __toString' 
+1

http://3v4l.org/Wf840 – deceze

回答

2

这似乎是旧的行为。

测试在PHP 5.4+产量预期的行为,而5.3产生你所看到的

http://codepad.viper-7.com/aZgP1h

看似相关的问题:
https://bugs.php.net/bug.php?id=26962
https://bugs.php.net/bug.php?id=60452

+0

啊。所以它可能是一个已被修复的错误?我目前在PHP 5.3.8上。 – jjok

+1

有趣的是,当它被提交为5.3.8的bug时,它被标记为“不是bug”,但是行为在5.4中改变了lol https://bugs.php.net/bug.php?id=60452它看起来像开发人员误解了(误读)。 – goat