PHP array_key_exists () ve SPL ArrayAccess arayüzü: uyumlu değil?

1 Cevap php

Ben nesneleri benim diziler saklayabilirsiniz böylece basit bir koleksiyon sınıfını yazdı:

class App_Collection implements ArrayAccess, IteratorAggregate, Countable
{
    public $data = array();

    public function count()
    {
    	return count($this->data);
    }

    public function offsetExists($offset)
    {         
        return (isset($this->data[$offset]));
    }   

    public function offsetGet($offset)
    {  
        if ($this->offsetExists($offset))
    	{
    		return $this->data[$offset];
    	}
    	return false;
    }

    public function offsetSet($offset, $value)
    {         
        if ($offset)
    	{
            $this->data[$offset] = $value;
    	}  
        else
    	{
            $this->data[] = $value; 
    	}
    }

    public function offsetUnset($offset)
    {
        unset($this->data[$offset]);
    }

    public function getIterator()
    {
        return new ArrayIterator($this->data);
    }
}

Bu nesne üzerinde () array_key_exists çağırırken bu fonksiyon SPL tarafından işlenen değil gibi görünüyor Problem:, her zaman "false" döndürür. Bu etrafında herhangi bir yolu var mı?

Proof of concept:

$collection = new App_Collection();
$collection['foo'] = 'bar';
// EXPECTED return value: bool(true) 
// REAL return value: bool(false) 
var_dump(array_key_exists('foo', $collection));

1 Cevap

Bu might PHP6 ele alınması bilinen bir sorundur. O zamana kadar, isset() veya ArrayAccess::offsetExists() kullanın.