ozonar
@ozonar
PHP, JS, webRTC

Почему unset удаляет изначальный параметр, а не параметр, который находится внутри метода?

Вот пример работы кода (ссылка на код онлайн):
<?php

class smthClass {
public $param;

function init () {
    $this->param = new stdClass();
    $this->param->x = 1;
    $this->param->y = 2;
}

function smthMethod($a) {
    unset($a->x);
}


}
$smthClass = new smthClass();
$smthClass->init();
$smthClass->smthMethod($smthClass->param);
var_dump($smthClass->param);


Результат:
object(stdClass)#2 (1) {
["y"]=>
int(2)
}

Хотя я ожидаю увидеть вне контекста функции и x и y. Так и должно быть? Как удалить параметр только внутри метода smthClass?
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
ozonar
@ozonar Автор вопроса
PHP, JS, webRTC
Переменная хранящая объект содержит идентификатор объекта, который позволяет найти конкретный объект при обращении к нему.

Когда объект передается как аргумент функции, возвращается или присваивается другой переменной, то эти разные переменные содержат копию идентификатора, который указывает на один и тот же объект.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@itxor
PHP/Golang/VueJS Developer
Могу предположить, что объект клонируется, а вот для параметров объекта клонируются ссылки на исходные параметры.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы