За последние 24 часа нас посетили 17517 программистов и 1722 робота. Сейчас ищут 1892 программиста ...

Почему PDO::FETCH_ASSOC указан (int)?

Тема в разделе "PHP и базы данных", создана пользователем Александр101, 14 мар 2023.

  1. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    В руководстве по РНР PHP: Предопределённые константы - Manual

    В пояснении к константе PDO::FETCH_ASSOC (int) указан именно (int), хотя она представляет данные в виде массива. Подскажите, почему так?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    константа - число ... а как и на что влияет она ... это никак не связано
     
  3. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Сомнительно. Есть всякие константы, строковые например.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    константы могут быть разные... но именно вот эти - числа
    и в любом случае тип самой кностанты никак не влияет на то с какими типами данных оперируют при ее использовании
     
  5. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Ну хорошо. Глубокими знаниями в этой области не обладаю. Да и не в каких других, скорее всего.
    Но вот хотелось бы по подробнее.
    PHP_VERSION (string), тоже предопределённая константа, всё понятно.
    А тут так
    PDO::FETCH_ASSOC (int), хотя выводит массив.
    Чем обусловлено? Наверняка есть причина. Возможно объяснение весьма простое.
    Поискал, но ни какой документации по этой теме не нашёл.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    константа никакого массива не выводит....
    константа она и есть константа и никакого объяснения тут нет
    разработчики pdo так решили
    PDO:: значит константа статического класса.....
    чего вы роете там где не нужно?
     
  7. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Пусть роет. Человек упорный. Может чего и найдет. ;)
     
  8. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Константа именно массив и выводит. Для этого она и существует. Если быть точным, не выводит, а возвращает.
    А объяснение, что так разработчики решили, ну, это из серии, что букву "л" в слово "солнце", Кирилл и Мефодий добавили чтобы учеников помучить.
    Сам склоняюсь к мысли, что это как то связано с типизацией данных в БД. Но это тоже, из цикла, сова и глобус.
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Шикарнейшее утверждение.
    Может быть, константа всё-таки передаётся в метод/функцию как аргумент, основываясь на значении которого функция что-то выполняет?
    ;)
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    По большому счету передаваемые константы это флаги, в зависимости от значения которых функция возвращает то или иное значение. И гораздо удобнее глазками видеть осмысленный набор
    PDO::FETCH_ASSOC
    чем например 2... И описалово где расписаны всё числа... Ещё раз константы возвращают только своё значение, не более.. Сделайте echo
    PDO::FETCH_ASSOC
    Там будет число
     
  11. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Может быть лучше как в документации написано?
    По теме есть какие то мысли?
    --- Добавлено ---
    С эхом интересная мысль, сейчас попробую.
    --- Добавлено ---
    С эхом интересная мысль, сейчас
     
  12. dantemgs

    dantemgs Новичок

    С нами с:
    24 дек 2022
    Сообщения:
    47
    Симпатии:
    9
    Вы путаете аргумент с return. int это аргумент а не то, что возвращает функция.
    Например это четко видно здесь https://www.php.net/manual/en/pdostatement.fetchall.php , запрос другой, но смысл тот же
     
  13. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Так и написано:
    Читается так:
    Класс: PDO, константа: FETCH_ASSOC, тип: целое число.
    А теперь то, что ТС так смутило:
    https://www.php.net/manual/ru/pdostatement.fetch.php
    Тут уже - описание метода fetch класса PDOStatement.
    @Александр101, параметр $mode - целое число, которым для "удобства" указывается одна из констант из раздела документации, приведённого в #1.
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Если в доке написано
    это не значит, что константа возвращает массив. И с правилами рус. яз. согласуется: если бы хотели написать, что константа возвращает массив :eek:, то не поставили бы двоеточия ;)
    --- Добавлено ---
    Слово «возвращает» относится к ф-ции (методу). Про константу бы сказали «является», «обозначает» и т.п. Короче хорош тупить :)
     
    #14 miketomlin, 14 мар 2023
    Последнее редактирование: 14 мар 2023
  15. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Всё, всё. Всем огромная благодарность что потратили на меня время, особенно ADSoft.
    Благодаря ему разобрался.

    Но вот это меня озадачило.
    PDO::FETCH_ASSOC: возвращает массив
    это не значит, что константа возвращает массив. И с правилами рус. яз. согласуется: если бы хотели написать, что константа возвращает массив :eek:, то не поставили бы двоеточия ;)

    Как блин это согласуется с русским языком? Мне двоеточие ни как не помогло. Возвращает массив, ну всё значит массив.

    fetch(PDO::FETCH_ASSOC), а вот так да, возвращается массив.
    --- Добавлено ---
    Вот Вы мне всё разжевали. Вот теперь уже всё понятно. Ещё раз, горячая благодарность, вопрос исчерпан.
     
  16. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Кстати, вот это хрень (в оригинале тоже returns):
    Походу авторы не могли представить, что кто-то подумает, что константа может что-то возвращать. А зря-я-я :D
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    Потому что это число как ID ссылающее на номер действия по выводу информации.
    --- Добавлено ---
    у меня например
    PHP:
    1.     public const
    2.         FETCH_NUM = 1,
    3.         FETCH_ASSOC = 2,
    4.         FETCH_OBJ = 4,
    5.         MYSQL_FETCH_BIND = 663,
    6.         FETCH_COLUMN = 265,
    7.         FETCH_KEY_PAIR = 307,
    8.         FETCH_NAMED = 173,
    9.         FETCH_UNIQUE = 333,
    10.         FETCH_GROUP = 428,
    11.         FETCH_FUNC = 586,
    12.         MYSQL_FETCH_FIELD = 343;
    PHP:
    1.     /*
    2.         - Контроль доступа к режиму вывода
    3.         - Режим возвращаемого результата со всех строк
    4.         - mode - Идентификатор возвращаемого стиля. Default Lerma :: FETCH_NUM
    5.         - argument - атрибут для совершения действий над данными
    6.     */
    7.     public function fetchAll( int $mode = null, \Closure | string | null $argument = null ): iterable
    8.     {
    9.         $mode ??= config( 'mode' );
    10.      
    11.         $this -> hashVerify();
    12.      
    13.         if ( isset ( Lerma :: MODE[ $mode ]['all'] ) )
    14.         {
    15.             $fetch = $this -> {Lerma :: MODE[ $mode ]['all']}( $mode, $argument );
    16.          
    17.             if ( $fetch instanceOf \Generator )
    18.             {
    19.                 return iterator_to_array ( $fetch );
    20.             }
    21.  
    22.             return $fetch;
    23.         }
    24.      
    25.         throw new LermaStatementException( 'Selected mode for the result was not found' );
    26.     }
     
  18. Александр101

    Александр101 Новичок

    С нами с:
    20 апр 2021
    Сообщения:
    29
    Симпатии:
    0
    Благодарю, за ещё более подробное разъяснение.
    Но в целом, тут уже напихали будь здоров.
    А объяснять мне, на примере объекта, дело гиблое.
    Базовых знаний, как оказалось нет, плюс ещё JS, с тем же уровнем освоения в эту кучу.