Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #18747

Re: ArrayObject vs array

From "J.O. Aho" <user@example.net>
Newsgroups comp.lang.php
Subject Re: ArrayObject vs array
Date 2021-07-25 11:48 +0200
Message-ID <im4qbnFnmluU1@mid.individual.net> (permalink)
References (2 earlier) <sdgbps$18kp$1@gioia.aioe.org> <im277qF7fbjU1@mid.individual.net> <sdgs5f$1suj$1@gioia.aioe.org> <sdhgno$tt9$1@jstuckle.eternal-september.org> <sdj9us$o4p$1@gioia.aioe.org>

Show all headers | View raw


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

Back to comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

ArrayObject vs array alex <1j9448a02@lnx159sneakemail.com.invalid> - 2021-07-23 11:16 +0200
  Re: ArrayObject vs array Jerry Stuckle <jstucklex@attglobal.net> - 2021-07-23 13:39 -0400
    Re: ArrayObject vs array alex <1j9448a02@lnx159sneakemail.com.invalid> - 2021-07-24 08:26 +0200
      Re: ArrayObject vs array "J.O. Aho" <user@example.net> - 2021-07-24 12:10 +0200
        Re: ArrayObject vs array alex <1j9448a02@lnx159sneakemail.com.invalid> - 2021-07-24 13:05 +0200
          Re: ArrayObject vs array Jerry Stuckle <jstucklex@attglobal.net> - 2021-07-24 12:56 -0400
            Re: ArrayObject vs array alex <1j9448a02@lnx159sneakemail.com.invalid> - 2021-07-25 11:13 +0200
              Re: ArrayObject vs array "J.O. Aho" <user@example.net> - 2021-07-25 11:48 +0200
                Re: ArrayObject vs array alex <1j9448a02@lnx159sneakemail.com.invalid> - 2021-07-26 10:14 +0200
                Re: ArrayObject vs array "J.O. Aho" <user@example.net> - 2021-07-26 11:11 +0200
                Re: ArrayObject vs array Arno Welzel <usenet@arnowelzel.de> - 2021-07-26 12:16 +0200

csiph-web