Если я stdObject
скажу $a
.
Конечно, нет проблем с назначением нового свойства $a
,
$a->new_property = $xyz;
Но потом я хочу удалить его, так что здесь unset
это не поможет.
Так,
$a->new_property = null;
вроде как. Но есть ли более «элегантный» способ?
Ответы:
Это работает для элементов массива, переменных и атрибутов объекта.
Пример:
источник
$o=(object)array('a','b','c');
(Вы должны преобразовать объект (обратно) в массив даже для простого доступа к таким свойствам!)object
, а не оarray
. ;-)array
вobject
? Это просто не имеет смысла (даже если PHP это позволяет). Я не буду кодировать и распространять вредные привычки программирования, комментируя это :) Без обид.unset($o->{0});
или$k = 0; unset($o->$k);
.Это также работает специально, если вы зацикливаетесь на объекте.
Обновить
Более новые версии PHP
Fatal error: Cannot use object of type Object as array
генерируют фатальную ошибку, упомянутую @CXJ. В этом случае вы можете использовать скобки вместоисточник
unset($object[$key])
работает иunset($object->{$key})
не работает (точнее,unset($object['literal_key'])
аunset($object->{'literal_key'})
). PS Хм, я могу ошибаться, хотя, думая, что я редактирую, это объект, а не массивЭто также работает, если вы зацикливаетесь на объекте.
Нет необходимости использовать скобки.
источник