Я новичок в php и учусь на php.net. нота говорит по следующей ссылке, что:
При использовании empty () будет вызываться и проверяться ArrayAccess :: offsetGet (), если он пуст, только если ArrayAccess :: offsetExists () возвращается ПРАВДА.
Что это значит?
Ссылка (http://php.net/manual/en/arrayaccess.offsetexists.php).
Надеюсь, это поможет, слишком много логических комбинаций не всегда помогают, хотя …
empty()
используется, чтобы проверить, считается ли значение «пустым», что означает, что оно либо не существует, либо имеет значение false (http://php.net/manual/en/function.empty.php).
Чтобы иметь возможность проверить это в классе, реализующем ArrayAccess (например, в классе, который разрешает доступ к типу массива — используя []), это означает, что в этом процессе есть два этапа.
Во-первых — существует ли элемент. Это делается по телефону offsetExists()
с элементом, который вы проверяете. Так с $data = [1,2];
и вы проверяете элемент 2, offsetExists()
вернет false (только 0 и 1 имеют значения) — что empty()
вернет true — поскольку условие 1 (элемент не существует) выполняется. Вызывается для элемента 1, который существует, empty()
вернет ложь (http://php.net/manual/en/arrayaccess.offsetexists.php).
Во-вторых, если элемент существует, вторая часть empty()
говорит, что он также считается пустым, если значение равно false. offsetGet()
извлечет значение из тестируемого элемента. Так $data[true,false]
, когда offsetGet()
вызывается для элемента 0, он вернет значение в позиции 0, которое является значением true. Условие 2 говорит, если значение ложно, что в данном случае не так, и поэтому empty()
вернет ложь. Но вызывается для элемента 1, который имеет значение false, empty()
вернет истину.
Других решений пока нет …