Если у меня есть stdObject
скажите, $a
.
Конечно, нет никаких проблем, чтобы назначить новое свойство $a
,
$a->new_property = $xyz;
Но тогда я хочу удалить его, поэтому unset здесь не поможет.
Так,
$a->new_property = null;
Это своего рода. Но есть ли более «элегантный» способ?
unset($a->new_property);
это работает для элементов массива, переменных и атрибутов объектов
** ИЗМЕНИТЬ **
Я не знаю, как вы использовали unset()
, но так оно и работает для меня:
$a = new stdClass(); $a->new_property = 'foo'; var_export($a); // -> stdClass::__set_state(array('new_property' => 'foo')) unset($a->new_property); var_export($a); // -> stdClass::__set_state(array())
с$a = new stdClass(); $a->new_property = 'foo'; var_export($a); // -> stdClass::__set_state(array('new_property' => 'foo')) unset($a->new_property); var_export($a); // -> stdClass::__set_state(array())
Это также работает специально, если вы перебираете объект.
unset($object[$key])
Более поздние версии PHP бросают фатальную ошибку. Fatal error: Cannot use object of type Object as array
как указано в @CXJ. В этом случае вы можете использовать этот синтаксис
unset($object->{$key})