แนะนำตัว
ใน PHP ArrayAccess อินเทอร์เฟซใช้ในการพัฒนาคลาสที่ให้อาร์เรย์เช่นการเข้าถึงคุณสมบัติอย่างใดอย่างหนึ่งซึ่งเป็นอาร์เรย์ คุณสมบัติอาร์เรย์ดังกล่าวอาจถูกจัดการโดยไม่เปิดเผยระหว่างการสร้างวัตถุ ArrayAccess อินเทอร์เฟซกำหนดวิธีการที่เป็นนามธรรมดังต่อไปนี้
ไวยากรณ์
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 }
วิธีการ
ArrayAccess::offsetExists − มีออฟเซ็ตหรือไม่
ArrayAccess::offsetGet − ออฟเซ็ตเพื่อดึง
ArrayAccess::offsetSet − กำหนดค่าให้กับออฟเซ็ตที่ระบุ
ArrayAccess::offsetUnset − ยกเลิกการตั้งค่าออฟเซ็ต
ตัวอย่าง ArrayAccess
ในตัวอย่างต่อไปนี้ อาร์เรย์ที่เชื่อมโยงเป็นพร็อพเพอร์ตี้ส่วนตัวภายในของ myclass คีย์ทำหน้าที่เป็นออฟเซ็ต เราสามารถตั้งค่า ดึง และยกเลิกการตั้งค่ารายการในอาร์เรย์ หากไม่กำหนดออฟเซ็ต จะถือเป็นจำนวนเต็ม ทุกครั้งที่เพิ่มขึ้นไปยังดัชนีถัดไป
ตัวอย่าง
<?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); ?>
ผลลัพธ์
โปรแกรมด้านบนแสดงผลลัพธ์ต่อไปนี้
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 ) )
คุณสมบัติอาร์เรย์ของคลาสยังสามารถเป็นอาร์เรย์ที่จัดทำดัชนีได้ ในกรณีนั้น ดัชนีขององค์ประกอบ (เริ่มต้นจาก 0) จะทำหน้าที่เป็นออฟเซ็ต เมื่อเรียก offsetSet(0 method โดยไม่มีอาร์กิวเมนต์ offset ดัชนีของอาร์เรย์จะเพิ่มขึ้นเป็นจำนวนเต็มถัดไปที่มี
ตัวอย่าง
<?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); ?>
ผลลัพธ์
โปรแกรมด้านบนแสดงผลลัพธ์ต่อไปนี้
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 ) )