The ArrayAccess interface

小彭友發表於2020-07-15
  1. 介面內容

    ArrayAccess {
     /* Methods */
     abstract public offsetExists ( mixed $offset ) : bool
     abstract public offsetGet ( mixed $offset ) : mixed
     abstract public offsetSet ( mixed $offset , mixed $value ) : void
     abstract public offsetUnset ( mixed $offset ) : void
    }
  2. 案例

    <?php
    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 (is_null($offset)) {
             $this->container[] = $value;
         } else {
             $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;
     }
    }
    $obj = new Obj;
    var_dump(isset($obj["two"]));
    var_dump($obj["two"]);
    unset($obj["two"]);
    var_dump(isset($obj["two"]));
    $obj["two"] = "A value";
    var_dump($obj["two"]);
    $obj[] = 'Append 1';
    $obj[] = 'Append 2';
    $obj[] = 'Append 3';
    print_r($obj);
    ?>
  3. 案例結果

     bool(true)
     int(2)
     bool(false)
     string(7) "A value"
     obj Object
     (
         [container:obj:private] => Array
             (
                 [one] => 1
                 [three] => 3
                 [two] => A value
                 [0] => Append 1
                 [1] => Append 2
                 [2] => Append 3
             )
     )
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章