如何在php中标记对未定义数组元素的引用

mnemlml8  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(116)

当我们试图赋值/访问数组的未定义索引时,PHP会抛出一个通知:

<?php
    $array = array(0=>array('title'=>'Titre','content'=>array()));
    $value = $array[1]['content']; // assignment, warning is issued

警告:第5行/home/user/scripts/code.php中的数组键1未定义
但是,当使用未定义的索引作为引用时,不会发出任何警告。看起来,引用未定义的数组元素将在您使用该引用时创建该元素,而不会发出任何警告。
我怎样才能改变这个行为,使PHP实际上抛出一个警告/通知,表明索引是未定义的?
x一个一个一个一个x一个一个二个x

nhhxz33t

nhhxz33t1#

我怎样才能改变这个行为,使PHP实际上抛出一个警告/通知,表明索引是未定义的?
显而易见的答案是先检查一下:

$array = [...];
if (!isset($array[1]['content'])) {
    trigger_error('no such thing', E_USER_WARNING);
}

但我认为一个更优雅的解决方案是在PHP 8中引入的throw-as-expression特性中使用空合并操作符。这将阻止它发生,这可能是您所希望的:

$array = [...];
$ref = &$array[1]['content'] ?? throw new Exception('no such thing');

如果您希望允许这种情况发生,并且只报告它,则生成错误而不是异常:

$array = [...];
$ref = &$array[1]['content'] ?? trigger_error('no such thing', E_USER_WARNING);

相关问题