Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Копия или указатель


Автор: ShurikA 23.9.2008, 21:59
Есть следующиe 2 классa:
Код

class classA {
...
...
...
private $_arr = array();

private $_classBObj;

function __constructor(){
   $this->_classBObj = new classB();
}

function setArray()
    $this->_classBObj->setArray($this->_arr);
    $this->_classBObj->changeArray();
}

class classB {
...
...
...
private $_arr = array();

function setArray($arr)
    $this->_arr = $arr;
}

function changeArray(){
    //не важно каким образом меняет массив
    $this->_arr = "whatever";
}


Изменится ли массив в обьекте класса А?

(нужно что бы не менялся)

Автор: Sunvas 23.9.2008, 22:54
Нет. Не изменится. С чего вдруг?

Добавлено через 1 минуту и 25 секунд
Проверить не судьба?

Автор: ShurikA 23.9.2008, 23:03
Цитата(Sunvas @  23.9.2008,  21:54 Найти цитируемый пост)
Проверить не судьба? 

Да вот в том то и дело что меняется... Не могу понять почему.

Автор: Sunvas 24.9.2008, 00:05
ShurikA, у тебя класс в классе что-ли?

Автор: ShurikA 24.9.2008, 00:12
Цитата(Sunvas @  23.9.2008,  23:05 Найти цитируемый пост)
ShurikA, у тебя класс в классе что-ли? 

В каком смысле?
У меня один обьект держит в себе инстанс вротого.

Добавлено через 43 секунды
Точнее массив таких инстансов.

Автор: sTa1kEr 24.9.2008, 10:47
1. Код полностью не рабочий. 
Какие фигурные скобки куда относятся не понятно. 
Конструктор класса пишется __construct(), а не __constructor().
2. Где код по которому делалась проверка на изменение массива из classA? Т.е. с чего вы взяли, что он меняется?
3. Разделом вы явно ошиблись.

Если хотите что бы вам помогли найти ошибку, то нужно приводить рабочий кусок кода и актуальный результат выполнения этого кода. Пример:
Код

class classA
{
    private $_arr = array();
    
    private $_classBObj;

    function __construct()
    {
        $this->_classBObj = new classB();
    }

    function setArray()
    {
        $this->_classBObj->setArray($this->_arr);
        $this->_classBObj->changeArray();
    }
}

class classB
{
    private $_arr = array();
    
    function setArray($arr)
    {
        $this->_arr = $arr;
    }

    function changeArray()
    {
        
        $this->_arr[] = "whatever";
    }
}

$a = new classA();
$a->setArray();
var_dump($a);

Вывод:
Код

object(classA)#1 (2) {
  ["_arr:private"]=>
  array(0) {
  }
  ["_classBObj:private"]=>
  object(classB)#2 (1) {
    ["_arr:private"]=>
    array(1) {
      [0]=>
      string(8) "whatever"
    }
  }
}


Автор: Vidocq 25.9.2008, 16:19
Парни, а какая версия пхп? не 5.х ли? =) Ибо в 5 пхп объекты передаются по ссылке, а не по значению.

Автор: lukas 25.9.2008, 19:25
Цитата(Vidocq @  25.9.2008,  16:19 Найти цитируемый пост)
Парни, а какая версия пхп? не 5.х ли? =) Ибо в 5 пхп объекты передаются по ссылке, а не по значению. 



в данном случае это не имеет значения...


$this->_arr и  $this->_classBObj->_arr - разные вещи...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)