我需要创建一个不可变的类,它只是一个成员字段容器。我希望其字段在其构造函数中实例化一次(值应作为构造函数的参数给出)。我希望这些字段是公开的但不可变的。我可以使用 Java 在每个字段之前使用 final
关键字来完成此操作。 PHP 中是如何完成的?
最佳答案
您应该使用 __set
和 __get
魔术方法并将该属性声明为 protected 或私有(private):
/**
* @property-read string $value
*/
class Example
{
private $value;
public function __construct()
{
$this->value = "test";
}
public function __get($key)
{
if (property_exists($this, $key)) {
return $this->{$key};
} else {
return null; // or throw an exception
}
}
public function __set($key, $value)
{
return; // or throw an exception
}
}
示例:
$example = new Example();
var_dump($example->value);
$example->value = "invalid";
var_dump($example->value);
string(4) "test"
string(4) "test"
@property-read
应该可以帮助您的 IDE 承认这个神奇属性的存在。
关于PHP:不可变的公共(public)成员字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317037/