Кое-что о COUNT('')

Я нашел вопрос в php7.3.4.

if ( count( '' ) == 1 )
{
    echo 1;
}  else {
    echo 2;
}

Эта программа выводит 1. Затем я проверил исходный код на наличие функции «счет».

PHP_FUNCTION(count)
{
    ....
    switch (Z_TYPE_P(array)) {
        case IS_NULL:
            php_error_docref(NULL, E_WARNING, "Parameter must be an array or an object that implements Countable");
            RETURN_LONG(0);
        break;
        case IS_ARRAY:
            ...
        break;
        case IS_OBJECT:
            ....
        break;
        default:
            php_error_docref(NULL, E_WARNING, "Parameter must be an array or an object 
            that implements Countable");
            RETURN_LONG(1);
        break;
}

Это легко произвести BUG. Я думаю, что count('') может быть ошибка вывода или 0 лучше, чем 1 и предупреждение. О чем вы думаете? А count(NULL) не равно count(''), как-то странно.

null !== '' - это разные типы данных. Это не синонимы
treyBake 19.07.2019 12:00

Я понимаю, что вы говорите, НО МОЙ вопрос: возможно, count ('') выводит ошибку или 0 лучше, чем 1 и предупреждение.

DDOS 19.07.2019 12:03

Это не вопрос. Это предложение, которое, если вас действительно беспокоит, должно быть адресовано сообществу, разрабатывающему PHP здесь, а не Stack Overflow. (Я предполагаю, что смысл 1 — «один из того, что вы передали», то есть «одна строка».) У строк уже есть несколько других способов сообщить вам свою длину, вам не нужно использовать count.

Amadan 19.07.2019 12:04

Спасибо за помощь. Я собираюсь передать это предложение сообществу: D

DDOS 19.07.2019 12:11

В PHP счет в основном используется для расчета array количества/длины. Если вы хотите найти длину строки, используйте strlen() вместо count(). Пожалуйста, перейдите по этой ссылке.(w3schools.com/php/showphp.asp?filename=demo_func_strin‌​g_strlen).

CreativeMinds 19.07.2019 12:14

И добавил один пункт, count() должен возвращать «1», если строка также доступна, даже пустая. Потому что это калькулятор подсчета массивов. Если вы используете count(null), он возвращает 0. В этом месте нуль означает «ничего». Но пустая строка считается строкой длины 0.

CreativeMinds 19.07.2019 12:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из count() документы:

Returns the number of elements in array_or_countable. When the parameter is neither an array nor an object with implemented Countable interface, 1 will be returned.

Таким образом, count('') возвращает 1, точно так же, как count('seventeen') возвращает 1. Работа по назначению.

Другие вопросы по теме