Sana "saf", "gerçek" dizileri kullanarak bunu yapabileceğimi sanmıyorum.
Bu might bazı sınıf kullanıyor ki uygular ArrayInterface
a> almak için bir yolu; bu dizileri kullanarak gibi size kod olmazdı ... Ama aslında bazı verilere yazma erişimi yasaklamış olabilir erişimci yöntemleri ile, nesneleri kullanarak olurdu, sanırım ...
Bu change a couple of things (creating a class, instanciating it) Seni olurdu; but not everything: erişim hala bir dizi benzeri sözdizimi kullanarak olacaktır.
Something like this might do the trick (adapted from the manual) :
class obj implements arrayaccess {
private $container = array();
public function __construct() {
$this->container = array(
"one" => 1,
"two" => 2,
"three" => 3,
);
}
public function offsetSet($offset, $value) {
if ($offset == 'one') {
throw new Exception('not allowed : ' . $offset);
}
$this->container[$offset] = $value;
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
}
$a = new obj();
$a['two'] = 'glop'; // OK
var_dump($a['two']); // string 'glop' (length=4)
$a['one'] = 'boum'; // Exception: not allowed : one
Sen hangi değil, new
ile bir nesne instanciate var çok dizi gibi ... Ama, bundan sonra, bir dizi olarak kullanabilirsiniz.
And when trying to write to an "locked" property, you can throw an Exception, or something like that -- btw, declaring a new Exception
class, like ForbiddenWriteException
, would be better : would allow to catch those specifically :-)