Computer >> Máy Tính >  >> Lập trình >> PHP

Giao diện PHP ArrayAcccess

Giới thiệu

Trong PHP, ArrayAccess interface được sử dụng để phát triển một lớp cung cấp mảng như quyền truy cập vào một trong các thuộc tính là mảng. Thuộc tính mảng như vậy có thể được thao tác mà không bị lộ trong quá trình tạo đối tượng. ArrayAccess interface xác định các phương thức trừu tượng sau

Cú pháp

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
}

Phương thức

ArrayAccess ::offsetExists - Liệu một phần bù có tồn tại hay không

ArrayAccess ::offsetGet - Chênh lệch để truy xuất

ArrayAccess ::offsetSet - Gán một giá trị cho phần bù được chỉ định

ArrayAccess ::offsetUnset - Bỏ đặt một phần bù.

Ví dụ về ArrayAccess

Trong ví dụ sau, một mảng kết hợp là phần mềm riêng tư bên trong của lớp tôi. Chìa khóa hoạt động như bù đắp. Chúng ta có thể đặt, gỡ bỏ và bỏ đặt một mục trong mảng. Nếu offset không được cung cấp, nó được coi là một số nguyên, mỗi khi tăng lên chỉ mục tiếp theo.

Ví dụ

<?php
class myclass implements ArrayAccess {
   private $arr = array();
   public function __construct() {
      $this->arr = array(
         "Mumbai" => "Maharashtra",
         "Hyderabad" => "A.P.",
         "Patna" => "Bihar",
      );
   }
   public function offsetSet($offset, $value) {
      if (is_null($offset)) {
         $this->arr[] = $value;
      } else {
         $this->arr[$offset] = $value;
      }
   }
   public function offsetExists($offset) {
      return isset($this->arr[$offset]);
   }
   public function offsetUnset($offset) {
      unset($this->arr[$offset]);
   }
   public function offsetGet($offset) {
      return isset($this->arr[$offset]) ? $this->arr[$offset] : null;
   }
}
$obj = new myclass();
var_dump(isset($obj["Mumbai"]));
var_dump($obj["Mumbai"]);
unset($obj["Mumbai"]);
var_dump(isset($obj["Mumbai"]));
$obj["Bombay"] = "Maharashtra";
var_dump($obj["Bombay"]);
$obj["Chennai"] = 'Tamilnadu';
$obj[] = 'New State';
$obj["Hyderabad"] = 'Telangana';
print_r($obj);
?>

Đầu ra

Chương trình trên hiển thị kết quả sau

bool(true)
string(11) "Maharashtra"
bool(false)
string(11) "Maharashtra"
myclass Object(
   [arr:myclass:private] => Array(
      [Hyderabad] => Telangana
      [Patna] => Bihar
      [Bombay] => Maharashtra
      [Chennai] => Tamilnadu
      [0] => New State
   )

)

Thuộc tính mảng của lớp cũng có thể là một mảng được lập chỉ mục. Trong trường hợp đó, chỉ mục của phần tử (bắt đầu từ 0) hoạt động như một phần tử bù đắp. Khi gọi offsetSet (0 phương thức không có đối số offset, chỉ số của mảng được tăng lên thành số nguyên có sẵn tiếp theo

Ví dụ

<?php
class myclass implements ArrayAccess {
   private $arr = array();
   public function __construct() {
      $this->arr = array("Mumbai", "Hyderabad", "Patna");
   }
   public function offsetSet($offset, $value) {
      if (is_null($offset)) {
         $this->arr[] = $value;
      } else {
         $this->arr[$offset] = $value;
      }
   }
   public function offsetExists($offset) {
      eturn isset($this->arr[$offset]);
   }
   public function offsetUnset($offset) {
      unset($this->arr[$offset]);
   }
   public function offsetGet($offset) {
      return isset($this->arr[$offset]) ? $this->arr[$offset] : null;
   }
}
$obj = new myclass();
var_dump(isset($obj[0]));
var_dump($obj[0]);
unset($obj[0]);
var_dump(isset($obj[0]));
$obj[3] = "Pune";
var_dump($obj[3]);
$obj[4] = 'Chennai';
$obj[] = 'NewDelhi';
$obj[2] = 'Benguluru';
print_r($obj);
?>

Đầu ra

Chương trình trên hiển thị kết quả sau

bool(true)
string(6) "Mumbai"
bool(false)
string(4) "Pune"
myclass Object(
   [arr:myclass:private] => Array(
      [1] => Hyderabad
      [2] => Benguluru
      [3] => Pune
      [4] => Chennai
      [5] => NewDelhi
   )

)