是否可以在PHP中删除对象的属性?

时间:2010-08-30 13:25:54

标签: php object

如果我有stdObject$a

确定分配新属性$a

没有问题
$a->new_property = $xyz;

但是我想删除它,所以unset在这里毫无帮助。

所以,

$a->new_property = null;

有点儿。但是,有更“优雅”的方式吗?

5 个答案:

答案 0 :(得分:287)

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

答案 1 :(得分:37)

如果您在一个对象上循环,这也会特别有效。

unset($object[$key])

更新

较新版本的PHP会抛出致命错误Fatal error: Cannot use object of type Object as array,如@CXJ所述。在这种情况下,您可以使用括号

unset($object{$key})

答案 2 :(得分:1)

如果您正在遍历对象,这也适用。

unset($object->$key);

无需使用方括号。

答案 3 :(得分:1)

这段代码对我来说循环很好

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

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

答案 4 :(得分:0)

将一个元素设置为 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);