2013-01-21 49 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