Массив в объекте передается по значению? - PullRequest
0 голосов
/ 14 января 2010

Может быть, я что-то упускаю, но наткнулся на это:

$employees = new stdClass();

$employee_id = 5;
$employee = array();
$employee["id"] = $employee_id;
$employee["name"] = "John;

$employees->$employee_id = $employee;

Теперь я хочу изменить имя сотрудника:

$employee = $employees->$employee_id;
$employee["name"] = "Tom";

Теперь у меня две проблемы:

  1. Объект сотрудника, похоже, не передан по ссылке, поскольку сотрудник внутри сотрудников по-прежнему называется Джон.

  2. Как мне узнать имя сотрудника? echo {$ employee -> $ employee_id} ["name"]; не работает

Спасибо за помощь,

Martin

Ответы [ 2 ]

2 голосов
/ 14 января 2010

1) PHP редко передается по ссылке. Если вы хотите форсировать передачу по ссылке, используйте оператор = &:

$employees->$employee_id =& $employee;

Подробнее читайте здесь: http://php.net/references

2) Использовать $employees->$employee_id во-первых, довольно некрасиво, но вот возможное решение:

$current_employee =& $employee->$employee_id;
echo $current_employee['name'];
1 голос
/ 14 января 2010

У вас есть лишние $, которых там быть не должно.

//$employees->$employee_id = $employee;     Wrong
$employees->employee_id = $employee;

С долларом php использует значение var. например ...

$name = "car";
$obj->car = 5;
$obj->$name = 10;

echo $obj->car;  // outputs 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...