如果我有一个stdObject,比如$a。

当然,分配一个新属性$a没有问题,

$a->new_property = $xyz;

但是我想把它移走,所以在这里不设置是没有用的。

So,

$a->new_property = null;

差不多吧。但还有更“优雅”的方式吗?


当前回答

将一个元素设为null只是将元素的值设为null,元素仍然存在

取消设置一个元素意味着删除该元素 它适用于数组,stdClass对象用户定义的类,也适用于任何变量

<?php
    $a = new stdClass();
    $a->one = 1;
    $a->two = 2;
    var_export($a);
    unset($a->one);
    var_export($a);
    
    class myClass
    {
        public $one = 1;
        public $two = 2;
    }
    
    $instance = new myClass();
    var_export($instance);
    unset($instance->one);
    var_export($instance);
    
    $anyvariable = 'anyValue';
    var_export($anyvariable);
    unset($anyvariable);
    var_export($anyvariable);

其他回答

将一个元素设为null只是将元素的值设为null,元素仍然存在

取消设置一个元素意味着删除该元素 它适用于数组,stdClass对象用户定义的类,也适用于任何变量

<?php
    $a = new stdClass();
    $a->one = 1;
    $a->two = 2;
    var_export($a);
    unset($a->one);
    var_export($a);
    
    class myClass
    {
        public $one = 1;
        public $two = 2;
    }
    
    $instance = new myClass();
    var_export($instance);
    unset($instance->one);
    var_export($instance);
    
    $anyvariable = 'anyValue';
    var_export($anyvariable);
    unset($anyvariable);
    var_export($anyvariable);
unset($a->new_property);

这适用于数组元素、变量和对象属性。

例子:

$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())

这段代码在循环中工作得很好

$remove = array(
    "market_value",
    "sector_id"
);

foreach($remove as $key){
    unset($obj_name->$key);
}

这也适用于当你循环一个对象。

unset($object[$key])

更新

致命错误:不能像@CXJ提到的那样使用object类型的对象作为数组。在这种情况下,你可以使用括号代替

unset($object->{$key})

这也适用于循环遍历对象。

unset($object->$key);

不需要使用括号。