As的magic function__toString()
的文檔解釋:
的__toString()
方法允許一個類決定當它像一個字符串處理它會如何反應。
由於類SimpleXmlElement
實現__toString()
魔術方法,它(該方法)被調用每次使用SimpleXmlElement
時間,其中的字符串被期待。使用__toString()
返回的值代替對象。
很難判斷這是一個功能還是bug 。函數testXml()
當前需要一個字符串作爲參數,您不會因爲它默默接受SimpleXmlElement
而感到高興。
如果刪除其參數的類型,則不會再發生對__toString()
的調用,並且函數內$xml
參數的值爲SimpleXmlElement
對象。對__toString()
的調用發生在echo "this is a string: " .$xml;
行,即使它不是字符串,也可以打印$xml
的值,這非常方便。
如果您認爲它是一個錯誤,然後echo
(它期望字符串作爲參數)應該抱怨$xml
的類型,不應該打印它。不那麼方便,不是嗎?
這是不是一個錯誤,這是語言如何進化的。 __toString()
是爲標量類型在type declarations之前引入的,爲了不打破現有行爲,在可能的情況下調用它,而不是觸發關於不正確類型參數的錯誤。
感謝您的詳細解釋,唉,我覺得它很刺激。 – dev0
我發現更令人不安的是,該對象在phpunit單元測試中轉換爲空字符串 – dev0
它是一個真實的對象還是一個模擬對象? – axiac