• ArrayObject vs array

    From alex@21:1/5 to All on Fri Jul 23 11:16:28 2021
    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?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jerry Stuckle@21:1/5 to alex on Fri Jul 23 13:39:01 2021
    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.

    --
    ==================
    Remove the "x" from my email address
    Jerry Stuckle
    jstucklex@attglobal.net
    ==================

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From alex@21:1/5 to All on Sat Jul 24 08:26:04 2021
    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?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From J.O. Aho@21:1/5 to alex on Sat Jul 24 12:10:02 2021
    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.

    --

    //Aho

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From alex@21:1/5 to All on Sat Jul 24 13:05:19 2021
    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?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jerry Stuckle@21:1/5 to alex on Sat Jul 24 12:56:13 2021
    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.

    --
    ==================
    Remove the "x" from my email address
    Jerry Stuckle
    jstucklex@attglobal.net
    ==================

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From alex@21:1/5 to All on Sun Jul 25 11:13:00 2021
    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?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From J.O. Aho@21:1/5 to alex on Sun Jul 25 11:48:39 2021
    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From alex@21:1/5 to All on Mon Jul 26 10:14:51 2021
    Il 25/07/21 11:48, J.O. Aho ha scritto:

    You can make objects to have links to other objects (reference),

    That is?

    then it
    would be a bit array like at the same time it can hold it's data

    That is?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From J.O. Aho@21:1/5 to alex on Mon Jul 26 11:11:28 2021
    On 26/07/2021 10.14, alex wrote:
    Il 25/07/21 11:48, J.O. Aho ha scritto:

    You can make objects to have links to other objects (reference),

    That is?

    class myclass {
    public $next;
    public $data;
    }

    $a = new myclass();
    next = new myclass();
    next->next = new myclass();


    then it would be a bit array like at the same time it can hold it's data

    That is?

    data = "my data";
    next->data = "next cell data";

    --

    //Aho

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Arno Welzel@21:1/5 to All on Mon Jul 26 12:16:44 2021
    alex:

    Il 25/07/21 11:48, J.O. Aho ha scritto:

    You can make objects to have links to other objects (reference),

    That is?

    <?php
    $a = new Object();

    // $b is a new reference ("link") to the object in $a and not(!) a copy

    $b = $a;

    // Now we change something in the object

    setName('foobar');

    // This will return the same name wich was just set using $b since
    // $b is just another reference to the object originally assinged to $a

    getName();


    If you need a copy of an object, you need to use the "clone" keyword:

    <?php
    $a = new Object();

    // This will create a copy of the object in $b
    $b = clone $a;




    --
    Arno Welzel
    https://arnowelzel.de

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)