За последние 24 часа нас посетили 12797 программистов и 659 роботов. Сейчас ищут 363 программиста ...

Как получить значение из такой строки

Тема в разделе "PHP для новичков", создана пользователем Анатолийновичок, 30 сен 2021.

  1. Анатолийновичок

    С нами с:
    23 сен 2021
    Сообщения:
    7
    Симпатии:
    0
    Есть такое строковое значение = {"ID":"2"}

    Мне нужно получить из этой строки значение 2, т.е. его идентификатор. Откуда взялось такое значение ? Мне передается по post запросу с другой программы.

    Решил вопрос таким образом: preg_replace("/[^0-9]/", '', $_POST["ID"]);

    Использовал парсинг! Но уверен это неправильно. Т.к. если такие значения передаются в таком виде с другой программы, то должен быть оператор, который извлекает это значение. Помогите, где-то видел такой оператор, который извлекает, не могу вспомнить.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.539
    Симпатии:
    590
  3. Анатолийновичок

    С нами с:
    23 сен 2021
    Сообщения:
    7
    Симпатии:
    0
    Спасибо тебе милостивый государь. Благодаря тебе нашел, как решить проблему $decodedData = json_decode( $_POST["ID"]);

    Так бы тупил еще неизвестно сколько
     
  4. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    449
    Симпатии:
    67
  5. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    еще как вариант
    PHP:
    1. $my_array = json_decode($my_json, 1);
    По сути то же самое - преобразует json в массив. А из массива выводим
    PHP:
    1. echo $my_array['ID'];
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    PHP:
    1. declare ( strict_types = 1 );
    Аминь варианту.
     
    don.bidon нравится это.
  7. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Это с каких таких пор? Пока на 8-ке ничего не ругается. Откуда инфа? Ежели чего то у себя поправлю, но пока нотисов еще не видел.
     
  8. Babka_Gadalka

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

    С нами с:
    16 фев 2019
    Сообщения:
    159
    Симпатии:
    21
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
    @musicman3, душечка, давай проверю это за тебя !
    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. error_reporting ( E_ALL );
    6.  
    7. json_decode( '{"ID":"2"}', 1 );
    PHP:
    1. Fatal error: Uncaught TypeError: json_decode(): Argument #2
    2. ($associative) must be of type ?bool, int given in
     
    musicman3 нравится это.
  9. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    У меня все пашет в error_reporting(-1); и пока не замечал такого. PHP8.0 даже нотиса нет хотя другие нотисы естественно есть. Как воспроизвести? Ваш код не выдает ошибок. Какая версия пхп?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    og_og_1602156438268044337.jpg

     
    SamyRed нравится это.
  11. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    error_reporting(-1); - это показывать все без исключения ошибки. К чему сарказмы? Я конечно поищу собаку. Интересный момент.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    PHP:
    1. ini_set ( 'error_log', __DIR__ . '/error.log' );
    Аминь -1
    --- Добавлено ---
    Аминь по всему твоему коду, на нотисы и фаталити.
     
    musicman3 нравится это.
  13. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Ну другие нотисы, фаталили и бруталити показывает исправно. Ладно, поищу что к чему. На 8.0 по крайней мере пашет еще. На всякий случай переделаю на true уже.

    P.S. нашел косяк. На 8-ке еще пахало, но нотисы эти сливало. Хорошо когда несколько голов обсуждают.
     
    #13 musicman3, 1 окт 2021
    Последнее редактирование: 1 окт 2021
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    Что ты собрался искать ? Это ? Строгую типизацию ?
    2021-10-01_23-09-59.png
     
    musicman3 нравится это.
  15. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Уже разобрался. Очень хорошее спасибо, мимо глаз пролетело кое что.
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    Причем тут PHP8 ?
    Когда строгая типизация не требуется по умолчанию - PHP интепретатор изначально доводит рукожопные типы, от кодеров, в нужный формат, по требованию функций.
    Это во всех версиях ( на сколько известно мне ).
     
    musicman3 нравится это.
  17. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Если следовать declare(strict_types = 1); то все высвечивает. Пхп тут не при чем, просто не обращал внимания. Сейчас продекларирую и пофиксю везде.
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.457
    Симпатии:
    1.721
    Вот поэтому я не ставлю эту фигню. Как-то php, не приводящий сам туда сюда типы, для меня уже не php. Когда захочу сверхстрогой типизации, перейду на джаву :)))
     
    SamyRed и musicman3 нравится это.
  19. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Вот и я сейчас второй день читаю нужна ли мне эта строгая типизация хотя бы для части классов, или толку от нее не будет. Инфы мало, но понимание как ее юзать конечно же есть полное. Только смысла пока до конца не вижу за исключением более удобного документирования и подстраховки от редкого случая несовпадения типов при отработке алгоритма. Для документирования удобны докблоки от документора, а со строгой типизацией получается двойное документирование, но и при этом некая плюшка или говнюшка, еще не ясно что именно.

    Если начать строго типизировать все классы разом у себя в проекте, то можно быстро попасть на баги, которые нужно будет отработать за какое то время. Это не так страшно, и в целом переход будет сделан за относительно быстрый срок. Но можно это делать и постепенно.

    Другой вопрос - за ним будущее или это очередной сахар, который мало применяют нынче и не ясно как с ним будет в будущем? Если будущее за ним, то и разрабы пхп пойдут на усиление работ с типизацией в будущем, и поэтому лучше начать сейчас заранее. С другой стороны, если это делается чтобы отбить докблоки, то как же тогда PSR-5/PSR-19, и уже внедренные инструменты в IDE, а также описательная часть метода, которой пока нет в пхп как стандарта (что занял докблок от документора и вполне красиво)? Мне кажется что это тенденция на усиление типизации, так как с каждой новой версией пхп гайки подвинчиваются. Есть идеи?

    Но если юзать это в качестве качественной документации в будущем, то этот вариант выигрывает у документора хотя бы тем, что метод не запустится если к примеру не верно указал выходные значения, а документор спокойно пропустит это и описательная часть будет не полная по сути с ним. Фишка конечно интересная в плане более четкой отработки и документирования методов и классов, а документор пока дополнит остаток. Желательно узнать мнение коллег конечно же, кто и что думает на этот счет.
     
    #19 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  20. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    449
    Симпатии:
    67
    Строгая типизация, как и
    PHP:
    отсеивает кучу ошибок в коде. Объём док-блоков вторичен.
    Наверное, карма хороша, коли такие случаи редки, особенно, когда код вояет юный падаван.
     
    MouseZver и artoodetoo нравится это.
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    строгая типизация - не будь говнокодером, стань на одну ступень выше эволюции
     
    musicman3 нравится это.
  22. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Да сделать во всем коде строгую типизацию - это довольно не сложно. От этого не станешь сразу на ступень выше эволюции. Но если практика идет к этому, то да, сделаю... Работы там не так много. Около 70 классов перевести на строгую типизацию. Большая часть сразу работает после ее включения и требуется только дополнить описательную часть по методам, и на некоторой части требуются корректировки (в частности json).
    Хотелось бы глянуть что ваяет юный бидон. А то так он много себя восхваляет. А до моего возраста еще дорасти нужно. Я еще на спектрумах первые проги писал.
     
    #22 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.457
    Симпатии:
    1.721
    Т.е всё что мы писали до семёрки, это говнокод? Ерунда.

    Я, правда, достаточно часто на небольших проектах допускаю и откровенный говнокод, в виде нарушения логики слоёв или копипасты, когда осознаю, что это не критично для проекта. Так же из типизацией - где-то я ставлю типы, где-то нет. Где-то мне хочется, чтоб строка автоматом в инт преобразовалась при этом, без моего участия. Для меня нерушимых догм в программировании не бывает, всё зависит от размеров проекта, требований заказчика, и т.п.

    Мне как-то попался на доработку проект, где человек перестарался с паттернами, слоями и прочей лабудой. Он его год пили, потом уволился, и меня за него посадили. То ещё удовольствие. Заказчик просит одно поле в таблицу добавить - и мне надо его прописать в валидаторе, в модели, и ещё в декораторе модели. Конечно, эти декораторы были неправильно сделаны, поскольку фактически не декорировали, а прописывали ещё раз все поля, но это я к тому, что пытаться строго следовать теориям всем - не всегда гуд.
     
    musicman3 нравится это.
  24. musicman3

    musicman3 Новичок

    С нами с:
    30 июн 2019
    Сообщения:
    123
    Симпатии:
    11
    Я с этим согласен. Сегодня все кричат что такой паттерн - это истина... Сделал так, через год все кричат что тот паттерн что ты сделал в том году - это прошлый век, и сиди теперь переписывай рабочий код на новый newPattern потому что это уже не модно и все делают по другому.... Т.е. по факту рабочий код перепиливаешь на тот же рабочий код по-новому. И хорошо когда от этого есть толк, а когда не факт что он есть? А по факту шашечки или ехать? Есть предел нормальности кода, но вылизывать в угоду каждому чиху - это значит стоять на месте. Нужно уметь определять меру. Чрезмерный паттернизм-идеализм так же страшен как и чрезмерный говнокод. Должен быть баланс, который оставит время развитию функционала проекта, а не только красивые шашечки.

    Да и объективно есть причины. Сделал строгую типизацию с mixed или перечислением типов через | (а оно без него и не нужно, так как миксед и перечисления давно нужны были), сразу попал с PHP 7.2 на минимум PHP 8.0.... А это может быть большой проблемой для многих проектов, так как уменьшит охват аудитории. И при этом я теперь рад что я не говнокодер? По сути наговнокодил, так как проект резко потеряет в аудитории и начальство даст по башке за такие инновации... Все относительно.
     
    #24 musicman3, 3 окт 2021
    Последнее редактирование: 3 окт 2021
  25. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.536
    Симпатии:
    1.278
    Адрес:
    Лень
    Конечно o_O С учетом того, что строгая типизация была во всех версиях PHP... до и после.

    2021-10-03_15-22-43.png