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

时间:2017-10-08 05:46:18

标签: php arrayaccess

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

  

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

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

以上示例将输出:

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

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

参考链接http://php.net/manual/en/arrayaccess.offsetset.php

谢谢!

2 个答案:

答案 0 :(得分:1)

你提到了ArrayAccess,这是界面,如果你在你的类中实现它 - 你将能够将你的类用作数组。

您从手册中复制了有关offsetSet方法的句子

  

注意:如果没有其他值,则offset参数将设置为NULL,如下例所示。

那里的例子并不正确,所以我准备另一个:

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

输出是:

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

如果你没有在代码中设置它,你可以看到offset参数是NULL,但是如果你使用这样的代码:

$arrayOffset[3] = "third value";

偏移参数将为3

<强>更新 回答你的问题:

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

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

答案 1 :(得分:1)

正如我们已经了解的那样,offsetSet()接口的ArrayAccess方法提供了将值的赋值处理为 offset <所需的逻辑/ em>实现ArrayAccess的对象:

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

当我们指定一个键来为ArrayAccess对象的偏移量赋值时,PHP将密钥传递给offsetSet()

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

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

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

此语法类似于未指定偏移量时数组执行 push 操作的方式:

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

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