PHP 如何像访问数组一样访问PHP类/对象?

答案

让类实现PHP的ArrayAccess(数组式访问)接口。

答案解析

例如:

  1. class myClass implements ArrayAccess {
  2. private $container = array();
  3. public function __construct() {
  4. $this->container = array(
  5. "one" => 1,
  6. "two" => 2,
  7. "three" => 3,
  8. );
  9. }
  10. // 设置一个偏移位置的值
  11. public function offsetSet($offset, $value) {
  12. if (is_null($offset)) {
  13. $this->container[] = $value;
  14. } else {
  15. $this->container[$offset] = $value;
  16. }
  17. }
  18. // 检查一个偏移位置是否存在
  19. public function offsetExists($offset) {
  20. return isset($this->container[$offset]);
  21. }
  22. // 复位一个偏移位置的值
  23. public function offsetUnset($offset) {
  24. unset($this->container[$offset]);
  25. }
  26. // 获取一个偏移位置的值
  27. public function offsetGet($offset) {
  28. return isset($this->container[$offset]) ? $this->container[$offset] : null;
  29. }
  30. }

然后就可以像数组一样访问这个类的对象了:

  1. $obj = new myClass;
  2. var_dump(isset($obj["two"]));
  3. var_dump($obj["two"]);
  4. unset($obj["two"]);
  5. var_dump(isset($obj["two"]));
  6. $obj["two"] = "A value";
  7. var_dump($obj["two"]);
  8. $obj[] = 'Append 1';
  9. $obj[] = 'Append 2';
  10. $obj[] = 'Append 3';
  11. print_r($obj);