Я учусь ArrayAccess интерфейс для моего последнего года проекта. Я не знаю когда смещение параметр ArrayAccess :: offsetSet () установлен в НОЛЬ. Как указано в php.net.
Примечание: параметр смещения будет установлен в NULL, если другое значение не
доступно, как в следующем примере.
<?php
$arrayaccess[] = "first value";
$arrayaccess[] = "second value";
print_r($arrayaccess);
?>
Приведенный выше пример выведет:
Array
(
[0] => first value
[1] => second value
)
Так что же такое концепция НОЛЬ Вот ? Кто-нибудь может сказать?
Ссылка Ссылка http://php.net/manual/en/arrayaccess.offsetset.php.
Спасибо !
Вы упомянули ArrayAccess, это интерфейс, и если вы реализуете его в своем классе — вы сможете использовать свой класс в качестве массива.
Вы скопировали предложение из руководства о методе offsetSet
Примечание. Параметру смещения будет присвоено значение 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'
Вы можете видеть, что параметр смещения равен NULL, если вы не установили его в коде, однако, если вы используете такой код:
$arrayOffset[3] = "third value";
параметр смещения будет 3
ОБНОВИТЬ:
Отвечая на ваш вопрос:
Нет. Если вы хотите поддерживать как вставку, так и обновление. Вы должны реализовать эту логику в offsetSet
метод. например:
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->data[] = $value;
} else {
$this->data[$offset] = $value;
}
}
Как мы узнали, offsetSet()
метод ArrayAccess
интерфейс обеспечивает логику, необходимую для обработки назначение значения для смещение объекта, который реализует 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!"
Этот синтаксис похож на то, как массив выполняет От себя операция, когда смещение не указано:
$array = [];
$array[] = 'Alex';
Когда мы реализуем offsetSet()
метод ArrayAccess
Интерфейс, мы можем выбрать для имитации этого поведения, или мы могли бы выполнить другое поведение, например, выбрасывать исключение, если мы не хотим поддерживать пустое смещение. ArrayAccess
объекты не обязательно необходимость скопировать поведение массивов.