Область действия свойства PHP переопределяется путем передачи в качестве ссылки? - PullRequest
0 голосов
/ 16 сентября 2008

В PHP, если вы возвращаете ссылку на защищенное / приватное свойство в класс, выходящий за рамки этого свойства, эта ссылка переопределяет эту область?

, например

class foo
{
  protected bar = array();
  getBar()
  {
    return &bar;
  }

}

class foo2
{
  blip = new foo().getBar(); // i know this isn't php
}

Правильно ли это и передается ли строка массива по ссылке?

1 Ответ

3 голосов
/ 16 сентября 2008

Ну, ваш пример кода не PHP, но да, если вы возвращаете ссылку на защищенную переменную, вы можете использовать эту ссылку для изменения данных вне области класса. Вот пример:

<code><?php
class foo {
  protected $bar;

  public function __construct()
  {
    $this->bar = array();
  }

  public function &getBar()
  {
    return $this->bar;
  }
}

class foo2 {

  var $barReference;
  var $fooInstance;

  public function __construct()
  {
    $this->fooInstance = new foo();
    $this->barReference = &$this->fooInstance->getBar();
  }
}
$testObj = new foo2();
$testObj->barReference[] = 'apple';
$testObj->barReference[] = 'peanut';
?>
<h1>Reference</h1>
<pre><?php print_r($testObj->barReference) ?>

Object

<?php print_r($testObj->fooInstance) ?>

Когда этот код выполняется, результаты print_r() покажут, что данные, хранящиеся в $testObj->fooInstance, были изменены с использованием ссылки, хранящейся в $testObj->barReference. Однако подвох заключается в том, что функция должна быть определена как возвращаемая по ссылке, и вызов также должен запрашивать ссылку. Вы нуждаетесь в них обоих! Вот соответствующая страница из руководства по PHP:

http://www.php.net/manual/en/language.references.return.php

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