下面的代码片段将在PHP 8.2上产生错误:
<?php
const foo = new stdClass();
foo->bar = 'baz';
echo foo->bar;
?>
我希望不会发生错误,因为我是在给prop赋值,而不是试图重新给常量赋值。
如果我创建一个新类,扩展stdClass
,并添加以下方法:
class extendsStdClass extends stdClass {
public function set(string $name, mixed $value) {
$this->$name = $value;
}
}
然后我可以使用以下语法将其赋值给props:
<?php
const foo = new extendsStdClass();
foo->set('bar', 'baz');
echo foo->bar;
?>
但是,剥绒机不会识别以这种方式设置的 prop ,也不会提供任何类型提示:
Undefined property: extendsStdClass::$bar
是否有什么原因导致我们无法在定义为常量的类示例上写入props?
1条答案
按热度按时间q3qa4bjr1#
我希望能够在命名空间中定义此常量,并通过以下方式访问/修改它
如果你想修改它,* 那么它不是一个常量 *。
如果你真的想要一个常量,那么你可以使用一个数组来获取键/值对:
然后通过以下方式在任何位置引用:
产量:
你可以用数组符号取出一个值:
如果你想通过命名空间直接引用某个东西,并且仍然可以修改,你可以创建一个静态存储的类,有点像半吊子的单例:
然后,您可以从任何位置设置值:
并从任何地方获取值: