Sobes.tech
Junior — Middle

Кадом усули махсус имкон медиҳад, ки ба объект ҳамчун массив ё коллексияи унсурҳо муроҷиат кунед?

sobes.tech AI

Ҷавоб аз AI

Дар PHP, усули махсуси ArrayAccess имкон медиҳад, ки объект ҳамчун массив амал кунад, яъне ба унсурҳои он бо истифода аз пардаҳои рост истифода бурдан.

Барои ин, синф бояд интерфейси ArrayAccess-ро амалӣ кунад, ки чор метод дорад:

  • offsetExists($offset) — санҷиш мекунад, ки оё унсури бо калиди $offset мавҷуд аст.
  • offsetGet($offset) — арзиши унсури бо калиди $offset-ро бармегардонад.
  • offsetSet($offset, $value) — арзиши $value-ро барои калиди $offset муқаррар мекунад.
  • offsetUnset($offset) — унсури бо калиди $offset-ро нест мекунад.

Масалан:

class MyCollection implements ArrayAccess {
    private $container = [];

    public function offsetExists($offset) {
        return isset($this->container[$offset]);
    }

    public function offsetGet($offset) {
        return $this->container[$offset] ?? null;
    }

    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    public function offsetUnset($offset) {
        unset($this->container[$offset]);
    }
}

$obj = new MyCollection();
$obj['key'] = 'value';
echo $obj['key']; // нишон медиҳад 'value'

Инчунин, иҷрои интерфейси ArrayAccess имкон медиҳад, ки ба объект ҳамчун массив муроҷиат кард.