如果另一个值不可用,则offset参数将设置为NULL。这在php中意味着什么?

如果另一个值不可用,则offset参数将设置为NULL。这在php中意味着什么?,php,arrayaccess,Php,Arrayaccess,我正在为我最后一年的项目学习如何使用ArrayAccess接口。我不知道ArrayAccess::offsetSet()的offset参数何时设置为NULL。如php.net中所述 注意:如果未指定其他值,则偏移参数将设置为NULL 可用,如下面的示例中所示 那么,NULL的概念是什么?谁能说出来 参考链接 谢谢 您提到了ArrayAccess,这是一个接口,如果您在类中实现它,您将能够将类用作数组 您从手册中复制了有关偏移集方法的句子 注意:如果另一个值不可用,则offset参数将设置为NUL

我正在为我最后一年的项目学习如何使用ArrayAccess接口。我不知道ArrayAccess::offsetSet()offset参数何时设置为NULL。如php.net中所述

注意:如果未指定其他值,则偏移参数将设置为NULL 可用,如下面的示例中所示

那么,NULL的概念是什么?谁能说出来

参考链接


谢谢

您提到了ArrayAccess,这是一个接口,如果您在类中实现它,您将能够将类用作数组

您从手册中复制了有关偏移集方法的句子

注意:如果另一个值不可用,则offset参数将设置为NULL,如以下示例所示

这里的示例并不正确,因此我准备了另一个示例:

输出为:

this is MyTest::offsetSet offset: NULL; value: 'first value'
this is MyTest::offsetSet offset: NULL; value: 'second value'
如果不在代码中设置偏移量参数,则可以看到该参数为NULL,但是如果使用这样的代码:

$arrayOffset[3]=“第三个值”

偏移参数将为
3

更新: 回答你的问题:

否。如果要同时支持插入和更新。您应该在
offsetSet
方法中实现此逻辑。e、 g:

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

正如我们所了解的,
ArrayAccess
接口的
offsetSet()
方法提供了将值赋值给实现
ArrayAccess
的对象偏移量所需的逻辑:

public function offsetSet($offset, $value) 
{
     if ($offset === null) { 
         echo "Offset is NULL!"; 
     } else {
         echo "You assigned '$value' to '$offset'."; 
     }
}
当我们指定一个键为
ArrayAccess
对象的偏移量赋值时,PHP将该键传递给
offsetSet()

但是,如果我们不提供键,PHP会将
offsetSet()
的第一个参数的值设置为
null

$arrayAccess[] = 'Alex'; 
// Outputs: "Offset is NULL!" 
此语法类似于未指定偏移量时数组执行推送操作的方式:

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

当我们实现
ArrayAccess
接口的
offsetSet()
方法时,我们可以选择模仿这种行为,或者我们可以执行不同的行为,例如,如果我们不想支持空偏移量,则抛出异常
ArrayAccess
对象不一定需要复制数组的行为。

因此这意味着如果没有分配偏移量,offsetSet()第一个参数偏移量将接收空值?但是在插入到数组中的过程中,偏移量将根据插入位置而不是空值进行分配?哈?@MummyDaddy是的,没错
ArrayAccess
允许我们选择当偏移量为空时,是希望对象的行为类似于
array
,还是让它执行其他操作。查看更新!是,如果不在代码中设置第一个参数,则该参数将为null。在php数组语法中,如果不设置偏移量,则基本上表示“array_push($array,“your value”);`,您没有提供偏移量,这就是为什么它为Null,并且在插入过程中,偏移量将根据位置在数组中分配,而不是Null,是吗?
$arrayAccess['name'] = 'Alex'; 
// Outputs: "You assigned 'Alex' to 'name'." 
$arrayAccess[] = 'Alex'; 
// Outputs: "Offset is NULL!" 
$array = []; 
$array[] = 'Alex';