PHP - член инкапсуляции возвращает странную ссылку - PullRequest
1 голос
/ 19 ноября 2008

У меня есть класс, у которого есть личный член $content. Это обернуто методом get:

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

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

Теперь $foo['c'] - это ссылка на content, чего я не понимаю. Как я могу получить значение? Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 19 ноября 2008

Я только что попробовал ваш код, и $foo['c'] не является ссылкой на $content. (Присвоение нового значения $foo['c'] не влияет на $content.)

По умолчанию все функции / методы PHP передают аргументы по значению и возвращают по значению. Чтобы вернуться по ссылке, вам нужно использовать этот синтаксис для определения метода:

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

И этот синтаксис при вызове метода:

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

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

3 голосов
/ 19 ноября 2008

Я не совсем понимаю ваш вопрос. говорят, что вы изменились:

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"
1 голос
/ 19 ноября 2008

В PHP вы не говорите: "$foo = new array();" Вместо этого вы просто говорите: "$foo = array();"

Я запустил ваш код (PHP 5.2.6), и он, кажется, работает нормально. Я проверил это, сбросив массив:

var_dump($foo);

Это выводит:

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

Я также могу просто использовать echo:

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

Это выводит:

foo[c] = ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...