我需要我的代码不发出任何通知,因此我编写了一个小类来访问数组,而不必一直担心 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/