Bir dize PHP nesne dönüştürmek nasıl?

7 Cevap

Possible Duplicate:
PHP ToString() equivalent

Ben bu hatayı alıyorum:

Catchable fatal error: Object of class stdClass could not be converted to string

Yani, benim soru nasıl bir nesne PHP bir dizeye dönüştürmek mi, nedir? Ben olsa serialize istemiyorum.

Sadece bir not: kod PHP 4 eserlerini kullanmak, ancak PHP 5

Teşekkürler!

EDIT: Ben kendim çözüldü. Bu bir ağrı oldu, ama ben yaptım. Yine de teşekkürler, herkese :-)

7 Cevap

Neden bu dize gerekiyor? Sadece hata ayıklama için görselleştirmek için gerekiyorsa, var_dump (), print_r () kullanabilir, ya da $s = print_r($var, 1); gerçekten daha tema için bir dizeye bunu yapmak için. Eğer başka bir yerde (veritabanı, Javascript kodu) metin olarak nesne göndermek gerekiyorsa, serialize, json_encode, XML dönüşüm, ve daha birçok seçenek var, tam durumunuza bağlı.

Ne gerek istediğinizi yazdırabilirsiniz böylece sınıfa sihirli yöntemi __toString eklemektir.

Düzenleme: Üzgünüm, sadece "PHP 4, fakat PHP 5" gördüm.

You want to convert a PHP object to a string?

Eğer ne var_dump, print_r, var_export, serialize, json_encode ne __toString olduğu sonra konum tam olarak ne belki bu sizin ihtiyaçlarını karşılamak yardımcı olabilir.

For PHP 5.3 and above

<?php
$v = (object) array('a' => 1, 'b' => 2, 'c' => 3);
$r = new ReflectionObject($v);

echo $r->getName() .' {' . implode(', ', array_map(
     function($p) use ($v) {
         $p->setAccessible(true);
         return $p->getName() .': '. $p->getValue($v);
     }, $r->getProperties())) .'}';

Çıktısı:

stdClass {a: 1, b: 2, c: 3}

For a more conventional approach compatible with previous PHP 5 flavours try

<?php
class ExampleClass {
    private $pvt = 'private';
    protected $prot = 'protected';
    public $pub = 'public';
}

$v = new ExampleClass();
$r = new ReflectionObject($v);

echo $r->getName() ." {\n";
foreach ($r->getProperties() as $p)
   if ($p->isPublic())
       echo "\tpublic ".$p->getName().': '.$p->getValue($v)."\n";
   else
       echo "\t".($p->isPrivate()?'private ':'protected ').$p->getName().",\n";
echo "}\n";

Basacaktır Hangi:

ExampleClass {
    protected pvt,
    protected prot,
    public pub: public
}

Ben bu nesne bir Convertable ile değil bir sorun olmadığını sanıyorum.

Daha o gibi, bir değişken bir dize içerdiğini varsayarak (veya bir dize olarak temsil edebilir bir şey), ama bir nesneyi içerir ve bu echo çalışıyoruz vardır bu.

Eğer php sihirli yöntemini kullanabilirsiniz __toString

Siz dizesinde bu nesneyi dönüştürmek için denemek gerekmez, o iş olmaz. Sadece o Nesne dan tam değerini getir.

Eğer cost.this maliyet çıktısı olarak çıktı var eğer bir örnek olarak Object. aşağıdaki gibi yani bu tam değerini almak

  $var=cost->Postage_cost;
  $var1=cost->other_cost;

olsun hatadan ben bir dize bekliyor bir işleve parametre olarak bir nesne için kullanılır varsayalım. O ve ne nesne ile bu işlevi bekliyoruz niye sorudur. ve sonra işlevine geçirmeden önce, mantıklı bir dize değeri ayıklayın.