首页 / PHP / PHP中的只读属性?
PHP中的只读属性?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP中的只读属性?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1922字,纯文字阅读大概需要3分钟。
内容图文
![PHP中的只读属性?](/upload/InfoBanner/zyjiaocheng/694/698ac06f98f64ed9a5b25277bf1e0e0e.jpg)
有没有一种方法可以使对象的只读属性在PHP中?我有一个带有几个数组的对象.我想像通常访问数组一样访问它们
echo $objObject->arrArray[0];
但是我不希望能够在构造完这些数组后对其进行写操作.感觉像构造本地变量的PITA:
$arrArray = $objObject->getArray1();
echo $arrArray[0];
而且无论如何,虽然它使数组保持在原始对象中,但并不能阻止我重写本地数组变量.
解决方法:
好吧,问题是您要阻止写在哪里?
第一步是将数组设置为保护数组或私有数组,以防止从对象范围之外进行写入:
protected $arrArray = array();
如果从数组的“外部”,GETTER可以使您满意.或者:
public function getArray() { return $this->arrArray; }
并像访问
$array = $obj->getArray();
要么
public function __get($name) {
return isset($this->$name) ? $this->$name : null;
}
并像这样访问它:
$array = $obj->arrArray;
注意,它们不返回引用.因此,您不能在对象范围之外更改原始数组.您可以更改数组本身…
如果您确实需要一个完全不变的数组,则可以使用一个使用ArrayAccess的对象…
或者,您可以简单地扩展ArrayObject并覆盖所有写入方法:
class ImmutableArrayObject extends ArrayObject {
public function append($value) {
throw new LogicException('Attempting to write to an immutable array');
}
public function exchangeArray($input) {
throw new LogicException('Attempting to write to an immutable array');
}
public function offsetSet($index, $newval) {
throw new LogicException('Attempting to write to an immutable array');
}
public function offsetUnset($index) {
throw new LogicException('Attempting to write to an immutable array');
}
}
然后,只需将$this-> arrArray设置为对象的实例:
public function __construct(array $input) {
$this->arrArray = new ImmutableArrayObject($input);
}
它仍然支持大多数数组用法:
count($this->arrArray);
echo $this->arrArray[0];
foreach ($this->arrArray as $key => $value) {}
但是,如果您尝试对其进行写入,则会得到LogicException …
哦,但是要意识到,如果您需要对其进行写操作,那么您所要做的(在对象内)就是:
$newArray = $this->arrArray->getArrayCopy();
//Edit array here
$this->arrArray = new ImmutableArrayObject($newArray);
内容总结
以上是互联网集市为您收集整理的PHP中的只读属性?全部内容,希望文章能够帮你解决PHP中的只读属性?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。