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 ) )