使用 php 7 避免“未定义索引”错误的正确方法(注意!!)

Correct way to avoid `Undefined index` error (NOT NOTICE!!) with php 7

我不是在说这个:

How to avoid undefined index

我说的是崩溃,致命错误。不是 "notice"。

EDIT 即使这是一个通知引起的,结果也是崩溃。我的问题是:如何配置 laravel,所以它不会在通知时崩溃?

我运行laravel 5.3和php7.

我的错误:

ErrorException in UploadController.php line 149:
Undefined index: AS

我的代码:

 if (!PlumConstants::$plum_us_states[$state]) {
        $state = '';
      }

引用我的常量class:

    class PlumConstants {
    public static $plum_us_states = array(
        'AL' => 'Alabama',
        'AK' => 'Alaska',
        'AZ' => 'Arizona',
        'AR' => 'Arkansas',
        'CA' => 'California',
//        ...
      );

    }

好吧,这有点好笑不是吗? 因为我正在做的是检查条目是否存在

 if (!PlumConstants::$plum_us_states[$pstate]) {

但不知何故 php 似乎因为没有定义的索引而恐慌和崩溃......而这正是我在代码中正在做和避免的事情。有没有办法关闭这种奇怪的行为?我可能可以使用 isset() 但我认为它很难看。因为 isset 并不意味着它不为 null 或为空。执行此操作的好方法是什么?

如果您使用 php7,您可以使用

PlumConstants::$plum_us_states[$pstate] ?? false

改为

!PlumConstants::$plum_us_states[$pstate] 
  1. 好的,您的示例中没有 'AS' 键。
  2. 在第一个代码示例中,您指定了 $state 变量,在第二个代码示例中 - $pstate
  3. 试试看 if (!array_key_exists($pstate, PlumConstants::$plum_us_states)) {