php 5.1.6 sihirli __ toString yöntemi

4 Cevap php

CodeIgniter'daki Im benim modellerinde bir toString yöntemi uygulamak gerekir this eklenti kullanmak çalışıyorum. Benim toString yöntemi sadece yapar

public function __toString()
{
    return (string)$this->name;
}

Php ile benim yerel makinede 5.3 herşey gayet güzel çalışıyor ancak php ile üretim sunucusundaki o nesnenin adını özelliğinin değeri görünmelidir "Object id # 48" gösterir 5.1.6 ..... Ben yaklaşık bir şey buldum problem here ama ben hala anlamıyorum ... Bu sorunu nasıl düzeltebilirim?

4 Cevap

Upgrade PHP

Ben aynı sorun ile uğraşıyorum, ben senin en iyi seçenek >= 5.2.0 için üretim sunucusundaki php yükseltmek olacaktır şüpheli

Gelecekte (Ben şu anda bu zor yoldan öğreniyorum), size dağıtmak olacaktır aynı sürüm geliştirmeye çalışın.

class YourClass 
{
    public function __toString()
    {
        return $this->name;
    }
}

PHP < 5.2.0

$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this does not call __toString()
echo 'Hello ' . $yourObject; // this does not call __toString()
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this does not call __toString()

PHP >= 5.2.0

$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this works
echo 'Hello ' . $yourObject; // this works
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this works

Kılavuzundan alıntı:

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.

Ben PHP

Açıkça sürümleri için php sihirli işlevi __ toString () çağırmak zorunda < 5.2. Yani kod böyle bir şey olacak:

    public function myname()
    {
       $name = $this->name;
       return $name.__toString(); //for php versions < 5.2,will also work > 5.2
    }

Sürümleri> 5.2 için __ toString otomatik olarak adlandırılır