Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "J.O. Aho" Newsgroups: comp.lang.php Subject: Re: ArrayObject vs array Date: Sun, 25 Jul 2021 11:48:39 +0200 Lines: 129 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net D3Co8ZeO0W/edqFutk12lwKGd/ifQWYKj5kEUGW+uyik4SNZq9 Cancel-Lock: sha1:N2HeyoRz5TzLN02PrV+tnTVRk5k= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 In-Reply-To: Content-Language: en-US-large Xref: csiph.com comp.lang.php:18747 On 25/07/2021 11.13, alex wrote: > Il 24/07/21 18:56, Jerry Stuckle ha scritto: >> On 7/24/2021 7:05 AM, alex wrote: >>> Il 24/07/21 12:10, J.O. Aho ha scritto: >>>> On 24/07/2021 08.26, alex wrote: >>>>> Il 23/07/21 19:39, Jerry Stuckle ha scritto: >>>>>> On 7/23/2021 5:16 AM, alex wrote: >>>>>>> class C implements ArrayAccess, Countable, IteratorAggregate, >>>>>>> Serializable { >>>>>>> >>>>>>>      private $container = ['a', 'b']; >>>>>>> >>>>>>>      public function offsetSet($offset, $value) { >>>>>>>          if (is_null($offset)) { >>>>>>>              $this->container[] = $value; >>>>>>>          } else { >>>>>>>              $this->container[$offset] = $value; >>>>>>>          } >>>>>>>      } >>>>>>> >>>>>>>      public function offsetExists($offset) { >>>>>>>          return isset($this->container[$offset]); >>>>>>>      } >>>>>>> >>>>>>>      public function offsetUnset($offset) { >>>>>>>          unset($this->container[$offset]); >>>>>>>      } >>>>>>> >>>>>>>      public function offsetGet($offset) { >>>>>>>          return isset($this->container[$offset]) ? >>>>>>> $this->container[$offset] : null; >>>>>>>      } >>>>>>> >>>>>>>      public function count() { >>>>>>>          return count($this->container); >>>>>>>      } >>>>>>> >>>>>>>      public function getIterator() { >>>>>>>          return new ArrayIterator($this->container); >>>>>>>      } >>>>>>> >>>>>>>      public function serialize() { >>>>>>>          return serialize($this->container); >>>>>>>      } >>>>>>> >>>>>>>      public function unserialize($data) { >>>>>>>          $this->container = unserialize($data); >>>>>>>      } >>>>>>> >>>>>>>      public function getData() { >>>>>>>          return $this->container; >>>>>>>      } >>>>>>> >>>>>>> } >>>>>>> >>>>>>> print_r( >>>>>>>          (array) new ArrayObject(['a', 'b']) >>>>>>> ); >>>>>>> print_r( >>>>>>>          (array) new C >>>>>>> ); >>>>>>> >>>>>>> Output: >>>>>>> >>>>>>> Array >>>>>>> ( >>>>>>>      [0] => a >>>>>>>      [1] => b >>>>>>> ) >>>>>>> Array >>>>>>> ( >>>>>>>      [Ccontainer] => Array >>>>>>>          ( >>>>>>>              [0] => a >>>>>>>              [1] => b >>>>>>>          ) >>>>>>> >>>>>>> ) >>>>>>> >>>>>>> Because the result is not the same? >>>>>> >>>>>> An object is not the same as a basic type.  A basic type holds one >>>>>> or more values.  An object can also have methods to operate on >>>>>> those values.  The two are not compatible. >>>>>> >>>>> >>>>> Could you tell me what these methods are? >>>> >>>> The object can be of any type, so the whole depends on the class >>>> definition. >>>> >>>> for example: >>>> class myclass { >>>>      public $array = Array(); >>>>      public function getFirst() { >>>>          if(sizeof($this->array) == 0) >>>>          { >>>>              return null; >>>>          } >>>>          return $this->array[1]; >>>>      } >>>> } >>>> >>>> this has the method getFirst. >>>> >>> >>> ??????? >>> So what? >> >> It means that the ArrayObject is a built-in type allows an object to >> function as an array, as the PHP doc says.  Your user-defined object >> contains an array but does not function as an array, as the output >> from print_r() shows. >> > > So there is no way to create an object (class) that can *also* function > as an array? - A class can have an variable that is an array. - An array can hold objects. You can make objects to have links to other objects (reference), then it would be a bit array like at the same time it can hold it's data, the problem will be that none of the array functions in PHP will work, so I think you need to pick one of the two options that have to use real arrays. -- //Aho