Задать вопрос
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?
  • Вопрос задан
  • 69 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
ozonar
@ozonar Автор вопроса
PHP, JS, webRTC
Переменная хранящая объект содержит идентификатор объекта, который позволяет найти конкретный объект при обращении к нему.

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

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

Похожие вопросы