如何在 PHP 7.4+ 中从对象中删除属性

3
如何在属性具有类型的情况下删除属性。
如果属性没有类型,则unset()可以起作用。
class A
{
  public string $a;
  public $b;
}

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

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

4
你实际上想要达到什么效果(我假设你并不真的在意var_dump输出什么)?移除一个已声明的属性是一件相当不寻常的事情,但是“initialized”状态已被定义为使得某些与其相关的技巧仍然有效。 - IMSoP
这个问题的回答是否对您有帮助? [如何在PHP运行时正确取消设置类属性?] (https://stackoverflow.com/questions/55615108/how-to-properly-unset-a-class-property-in-php-during-runtime) - 0stone0
@0stone0,那个似乎没有特别涉及到类型化属性,至少我看不出来。 - Chris Haas
1
该属性未被var_exportserializejson_encode导出(输出显示为var_dump)。我并没有看到这种行为有什么问题(它是一个已声明的类属性)。还有其他原因可能不希望导出该属性吗? - Jared Farrish
1个回答

3
根据关于类型化属性的RFC的规定:

如果一个类型化属性被unset(),它将返回未初始化状态。虽然我们希望删除对属性取消设置的支持,但Doctrine目前仍在使用此功能进行懒惰初始化,结合以下章节所描述的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接