php - 将数组转换为对象以自动化 array_key_exists()

标签 php arrays oop

我需要我的代码不发出任何通知,因此我编写了一个小类来访问数组,而不必一直担心 undefined index 。

class ArrayAsObject
{
  private $array;

  public function __construct(&$array) {
    $this->array = &$array;
  }

  public function __get($key)
  {
    if (array_key_exists($key, $this->array)) {
      return $this->array[$key];
    } else {
      return null;
    }
  }
}

$fruits = array ('apples' => 42);
$fruits = new ArrayAsObject($fruits);

echo $fruits->apples;  // 42
echo $fruits->lemons;  // null

我只是想知道这是否会产生任何意想不到的后果,或者我可以将其用于任何数组并从此幸福地生活吗?

最佳答案

我将从ArrayObject延伸像这样的类:

class MyArrayObject extends ArrayObject{

    public function offsetGet($name) {
        if($this->offsetExists($name))
            return parent::offsetGet($name);
    }
}

使用函数 offsetGet() 您可以访问数组数据,因此如果您调用 $myObjectArray['test'] 该函数就会被调用。然后,如果您使用 offsetExists() 检查该键是否已设置,您将返回该值。否则结果将为空

编辑:

如果你想将其也用作对象,则需要添加以下两个函数:

public function __get($name){
    return $this->offsetGet($name);
}

public function __set($name, $value){
    $this->offsetSet($name, $value);
}

关于php - 将数组转换为对象以自动化 array_key_exists(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23214438/

相关文章:

javascript - 如何在 jQuery 中通过 .post 发送数组?

javascript - 更好的 JavaScript 对象初始化

javascript - JQuery 插件类不工作

php - 输出缓冲与将内容存储到 PHP 变量中

php - SQL 注入(inject) - 向表中插入数据

javascript - 如何上传到Amazon S3 Bucket中的新文件夹?

php - 在 PHP 中循环遍历 mysql_fetch_array

arrays - 如何在 F# 中添加两个数值数组

php - 设计投票系统

php - 用变量定义类常量