|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #30113 ArrayAccess interface does not implement count functionality
Submitted: 2004-09-16 14:44 UTC Modified: 2010-12-29 14:04 UTC
Avg. Score:1.0 ± 0.0
Reproduced:0 of 1 (0.0%)
From: kevin at stormtide dot ca Assigned: helly (profile)
Status: Closed Package: SPL related
PHP Version: 5.0.* OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: kevin at stormtide dot ca
New email:
PHP Version: OS:


 [2004-09-16 14:44 UTC] kevin at stormtide dot ca
IN SPL: The ArrayAccess interface does not correcly work with the root level count() function. I realise that the ArrayObject interface supposedly does, however that class requires an array as the basis, and thus is not useful for virtual arrays (like abstracting a large db without ever loading it)

Reproduce code:
class somearray implements ArrayAccess {
  ... overloads and such.
  function length() {
    return count($this->internalarrayorabstract);
$inst = new somearray();
$inst[0] = 'foo';
$inst[1] = 'foo';
$inst[2] = 'foo';
$length = $isnt->length;
$countedlength = count($inst);

//$length and $countedlength will differ in value with the latter returning 1 always and the former the correct val.

Expected result:
$countedlength == $length

Actual result:
$countedlength == 1


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2004-10-29 11:52 UTC] kevin at oceania dot net
check your code.
If this is a cut and paste you have typo here:
$length = $isnt->length;
should read
$length = $inst->length;
 [2004-10-29 18:25 UTC] kevin at stormtide dot ca
Sorry for the mockup code. I thought it would be sufficient to describe the problem.

Here is actually executable code.


	class NArray Implements ArrayAccess, Iterator {
		private $arraylist;
		private $currentIndex;
		function __construct() {
			$this->currentIndex = 0;
			$this->arraylist = array();
		function offsetExists($offset){
		       return TRUE;
		   } else {
		       return FALSE;

		function offsetGet($offset){
		   return $this->arraylist[$offset];

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

		function offsetUnset($offset){
		function current() {
			return $this->arraylist[$this->currentIndex];
		function key() {
			return $this->currentIndex;
		function next() {
			return $this->arraylist[$this->currentIndex++];
		function rewind() {
			$this->currentIndex = 0;
		function valid() {
			if(array_key_exists($this->currentIndex, $this->arraylist)) {
				return true;
			} else {
				return false;
		function append($value) {
			$this->arraylist->offsetSet(null, $value);
		function length() {
			return count($this->arraylist);

		function getIterator() {
			return $this;

	$nArray = new NArray();
	$nArray[0] = 'a';
	$nArray[1] = 'b';
	$nArray[2] = 'c';
	$nArray[3] = 'd';
	foreach($nArray as $index => $item) {
		echo $index . ' = '. $item . '<br />';
	echo 'Counted Length Outside Class: '. count($nArray) ."<br>";
	echo 'Counted Length Inside Class: '.$nArray->length();
	echo "<br><br><br>";

Please ignore the fact that this should be an arrayobject because it is simply a proof of concept, the use of an arrayaccess interface will be used later to work with a sql dataset without actually loading all the data in that dataset. A count value will be returned from num_rows type commands without an internal array of the data ever existing.

Hope this helps.
 [2004-11-01 11:17 UTC]
Probably PHP 5.1 comes with the following interface which works with count():

Interface Countable
    function count()
 [2004-11-01 11:45 UTC]
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
Thank you for the report, and for helping us make PHP better.

Countable is added to 5.1-dev
 [2010-12-29 14:04 UTC]
-Package: PECL related +Package: SPL related
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Fri Sep 30 03:03:49 2022 UTC