PHP 只读属性?
2022-08-30 09:21:06
在使用PHP的DOM类(DOMNode,DOMEElement等)时,我注意到它们具有真正的只读属性。例如,我可以读取DOMNode的$nodeName属性,但我不能写入它(如果我这样做,PHP会抛出致命错误)。
如何在 PHP 中创建自己的只读属性?
在使用PHP的DOM类(DOMNode,DOMEElement等)时,我注意到它们具有真正的只读属性。例如,我可以读取DOMNode的$nodeName属性,但我不能写入它(如果我这样做,PHP会抛出致命错误)。
如何在 PHP 中创建自己的只读属性?
你可以这样做:
class Example {
private $__readOnly = 'hello world';
function __get($name) {
if($name === 'readOnly')
return $this->__readOnly;
user_error("Invalid property: " . __CLASS__ . "->$name");
}
function __set($name, $value) {
user_error("Can't set property: " . __CLASS__ . "->$name");
}
}
仅在您真正需要时才使用它 - 它比正常的属性访问慢。对于 PHP,最好采用仅使用 setter 方法从外部更改属性的策略。
在声明属性期间,只能初始化一次只读属性。
class Test {
public readonly string $prop;
public function __construct(string $prop) {
$this->prop = $prop;
}
}
--
class Test {
public function __construct(
public readonly string $prop,
) {}
}
尝试修改只读属性将导致以下错误:
Error: Cannot modify readonly property Test::$prop