Yerine alma dize örtük dönüştürme "Nesne ID # .."

2 Cevap php

Ben şimdiye kadar kullanarak oldum yerine 5.2 php 5.1 var idi, yeni bir host için hareket ettik. Bir php sürümü veya yapılandırma sorunu ise ben hâlâ çözemedim.

Şu anda sahip sınıfların çoğu (veya tamamını) __ toString işlevleri (PHP4 gibi) "ID # Object" dönüştürmek ama hepsi doğru değerleri döndü önce.

Bunu nasıl düzeltebilirim?

2 Cevap

Görünüşe göre önce PHP 5.2 için __toString yöntemi, yalnızca "sihirli" olarak adlandırılan bazı durumlarda (örneğin, echo() ve print()) idi. Şu anda direkt çıkış fonksiyonları dışında bir "sihirli" bir şekilde __toString() kullanıyorsanız Yani beklendiği gibi işe yaramaz.

Source:

It is worth noting that before PHP 5.2.0 the __toString method was only called when it was directly combined with echo() or print(). Since PHP 5.2.0, it is called in any string context (e.g. in printf() with %s modifier) but not in other types contexts (e.g. with %d modifier). Since PHP 5.2.0, converting objects without __toString method to string would cause E_RECOVERABLE_ERROR.

(1and1 gibi) Bazı ana şirketleri PHP 4.x ve 5.x ve 4.x için varsayılan hem de çalıştırmak Eğer PHP doğru sürümünü kullandığınızdan sağlayan bir. Htaccess dosyası gerekebilir.

Ayrıca, sihirli __ toString () sürüm 5.2 'den biraz farklı + göre documentation:

Bu fazlalaştı ki PHP doğrudan echo () veya print () ile kombine edildiğinde __ toString yöntemi yalnızca çağrıldı 5.2.0 önce. PHP 5.2.0 bu yana, (% s değiştiricili printf ()) herhangi bir dize bağlamda değil, diğer bağlamlarda (örneğin% d değiştiricili) denir. PHP 5.2.0 'dan beri dize __ toString yöntemi olmadan nesneleri dönüştürürken E_RECOVERABLE_ERROR neden olur.

Yani, çıkış arıyorsun nasıl bağlı olabilir.