PHP - üye kapsülleme garip başvuruyu verir

4 Cevap php

Ben Özel üye $content olan bir sınıf var. Bu bir get yöntemi ile sarılır:

class ContentHolder
{
    private $content;
    public function __construct()
    {
        $this->content = "";
    }

    public function getContent()
    {
        return $this->content;
    }
}
$c = new ContentHolder();
$foo = array();
$foo['c'] = $c->getContent();

Şimdi $foo['c'] Ben anlamıyorum ne content için bir referans olduğunu. Nasıl değer alabilir miyim? Şimdiden teşekkür ederim.

4 Cevap

Ben sadece kod çalıştı ve $foo['c'] $content için bir referans değildir. ($foo['c'] etkilemez için yeni bir değer atama $content.)

Varsayılan olarak tüm PHP fonksiyonları / yöntemler değerine göre argümanları geçmek ve değerine göre döner. Referans dönmek için, yöntem tanımı için bu sözdizimini kullanmak gerekir:

public function &getContent()
{
    return $this->content;
}

Ve bu sözdizimi yöntemini çağırırken:

$foo['c'] = &$c->getContent();

Bkz http://ca.php.net/manual/en/language.references.return.php.

Oldukça sorunuzu anlayamıyorum. Eğer değişti ki:

public function __construct() {
    $this->content = "test";
}

$c = new ContentHolder();
$foo = array();
$foo['c'] = $c->getContent();

print $foo['c'];          // prints "test"
print $c->getContent();   // prints "test"

In PHP, you don't say: "$foo = new array();" Instead, you simply say: "$foo = array();"

Ben kodu (PHP 5.2.6) koştu ve iyi iş gibi görünüyor. Ben diziyi damping bunu test:

var_dump($foo);

Bu çıkışlar:

array(1) {
  ["c"]=>
  string(0) ""
}

I can Ayrıca basit kullanımı echo:

echo "foo[c] = '" . $foo['c'] . "'\n";

Bu çıkışlar:

foo[c] = ''

Tamam, haklısın. Benim sorunun basit bir örnek yapmaya çalıştım, ama aslında yukarıdaki işleri, ve bu yüzden benim kod yapar. Bir hata ayıklayıcı ile çalışarak, değeri ve türü olarak "Yumuşak Referans" olarak "için Referenco ..." var. Bu nedenle ben bir hata düşündüm. Görünüşe göre bu Ayıklayıcı'nın izleme sadece bir konudur - teşekkürler zaten!