2009-06-02 35 views
0

我已經轉移到一個新的虛擬主機我們有PHP 5.1而不是5.2,直到現在我一直在使用。我還沒有弄清楚它是否是php版本或配置問題。隱式轉換爲字符串,而不是獲取「對象ID#..」

現在,大部分(或全部)具有__toString函數的類會轉換爲「Object ID#」(類似於php4),但它們都返回正確的值之前。

我該如何解決這個問題?

+0

對於您遇到的問題,您能更清楚些嗎?關於之前發生的事情(包括5.2)和現在發生的事情(包含5.1)的更多細節? – 2009-06-02 18:45:43

回答

3

顯然在PHP 5.2之前,__toString方法在某些情況下只能「神奇地」調用(例如echo()print())。因此,如果您正在使用__toString()以直接輸出功能之外的「魔術」方式使用,則它不會按預期工作。

Source

值得一提的是,PHP 5.2.0之前當它直接與echo()print()組合 才被稱爲__toString方法。由於PHP 5.2.0,它在任何字符串上下文中調用(例如,在printf()中使用%s 修飾符),但不在其他類型的 上下文中(例如使用%d修飾符)。 自PHP 5.2.0起,將對象 而不使用__toString方法轉換爲字符串 將導致E_RECOVERABLE_ERROR

+0

我意識到一些輸出是通過回聲,一些是作爲返回值。 現在我已經聯繫了支持人員更新php5。 謝謝 – Auras 2009-06-02 19:02:06

+0

沒有問題 - 確保它的PHP 5.2是截止日期。 – 2009-06-02 19:05:15

1

一些主機公司(如1and1)運行PHP 4.x和5.x,默認爲4.x.您可能需要有一個.htaccess文件,以確保您使用的是正確版本的PHP。

此外,魔術__toString()是從版本略有不同5.2+根據documentation

值得一提的是,PHP 5.2.0之前,當它被直接合並__toString方法僅稱爲用echo()或print()。從PHP 5.2.0開始,它在任何字符串上下文中調用(例如在帶有%s修飾符的printf()中),但不在其他類型的上下文中(例如使用%d修飾符)。從PHP 5.2.0開始,將不帶__toString方法的對象轉換爲字符串將導致E_RECOVERABLE_ERROR。

所以,它可能取決於你如何調用輸出。