简体   繁体   中英

The offset parameter will be set to NULL if another value is not available what does it mean in php?

I am learning to ArrayAccess interface for my final year project. I don't know when the offset parameter of the ArrayAccess::offsetSet() is set to NULL . As stated in the php.net .

Note: The offset parameter will be set to NULL if another value is not available, like in the following example.

<?php
$arrayaccess[] = "first value";
$arrayaccess[] = "second value";
print_r($arrayaccess);
?>

The above example will output:

Array
(
    [0] => first value
    [1] => second value
)

So what is the concept of NULL here ? Can anyone tell ?

Reference Link http://php.net/manual/en/arrayaccess.offsetset.php .

Thanks !

You mentioned ArrayAccess, this is interface, and if you implement that in your class - you will be able to use your class as array.

You copied sentence from manual about offsetSet method

Note: The offset parameter will be set to NULL if another value is not available, like in the following example.

Example is not really correct there, so I prepare another one:

http://sandbox.onlinephpfunctions.com/code/baedfadc9bd6bbfbde5ef7152e8c4e7d4a1d99e2

output is:

this is MyTest::offsetSet offset: NULL; value: 'first value'
this is MyTest::offsetSet offset: NULL; value: 'second value'

You can see that offset parameter is NULL if you do not set it in the code, however if you use code like that:

$arrayOffset[3] = "third value";

offset parameter will be 3

UPDATE: Answering on your question:

No. If you want to support both, insertion, and updating. You should implement this logic in offsetSet method. eg:

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

As we've learned, the offsetSet() method of the ArrayAccess interface provides the logic needed to handle assignment of a value to an offset of the object that implements ArrayAccess :

public function offsetSet($offset, $value) 
{
     if ($offset === null) { 
         echo "Offset is NULL!"; 
     } else {
         echo "You assigned '$value' to '$offset'."; 
     }
}

When we specify a key to assign a value to an offset of an ArrayAccess object, PHP passes the key to offsetSet() :

$arrayAccess['name'] = 'Alex'; 
// Outputs: "You assigned 'Alex' to 'name'." 

However if we don't provide a key, PHP sets the value of the first parameter of offsetSet() to null :

$arrayAccess[] = 'Alex'; 
// Outputs: "Offset is NULL!" 

This syntax is similar to how an array performs a push operation when no offset is specified:

$array = []; 
$array[] = 'Alex'; 

When we implement the offsetSet() method of the ArrayAccess interface, we can choose to mimic this behavior, or we could perform a different behavior, such as throwing an exception if we don't want to support an empty offset. ArrayAccess objects don't necessarily need to copy the behavior of arrays.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM