【问题标题】:How to remove property from object in PHP 7.4+如何在 PHP 7.4+ 中从对象中删除属性
【发布时间】:2021-11-06 23:29:57
【问题描述】:

如果属性有类型,如何删除属性。

unset()在属性没有类型时工作。

class A
{
  public string $a;
  public $b;
}

$o = new A();
unset($o->a);
unset($o->b);

// object(A)#1 (0) {
//   ["a"]=>
//   uninitialized(string)
// }

【问题讨论】:

  • 您实际上想要达到的效果是什么(我假设您实际上不在乎 var_dump 输出什么)?删除已声明的属性是一件有些不寻常的事情,但“初始化”状态已被定义,因此涉及它的某些技巧仍然有效。
  • @0stone0,至少据我所知,它并没有专门解决类型化的属性
  • 该属性未使用var_exportserializejson_encode 导出(显示的输出为var_dump)。我没有看到这种行为的问题(它是一个声明的类属性)。这可能是不需要的还有其他原因吗?

标签: php php-7.4 php-8


【解决方案1】:

根据RFC on typed properties

如果一个类型化的属性是 unset(),那么它返回到未初始化的状态。虽然我们很乐意删除对取消设置属性的支持,但此功能目前被 Doctrine 用于延迟初始化,并结合下一节中描述的功能。

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 2011-05-09
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2021-09-11
    • 2020-02-21
    • 2015-03-10
    相关资源
    最近更新 更多