Есть такое строковое значение = {"ID":"2"} Мне нужно получить из этой строки значение 2, т.е. его идентификатор. Откуда взялось такое значение ? Мне передается по post запросу с другой программы. Решил вопрос таким образом: preg_replace("/[^0-9]/", '', $_POST["ID"]); Использовал парсинг! Но уверен это неправильно. Т.к. если такие значения передаются в таком виде с другой программы, то должен быть оператор, который извлекает это значение. Помогите, где-то видел такой оператор, который извлекает, не могу вспомнить.
Спасибо тебе милостивый государь. Благодаря тебе нашел, как решить проблему $decodedData = json_decode( $_POST["ID"]); Так бы тупил еще неизвестно сколько
еще как вариант PHP: $my_array = json_decode($my_json, 1); По сути то же самое - преобразует json в массив. А из массива выводим PHP: echo $my_array['ID'];
Это с каких таких пор? Пока на 8-ке ничего не ругается. Откуда инфа? Ежели чего то у себя поправлю, но пока нотисов еще не видел.
@musicman3, душечка, давай проверю это за тебя ! PHP: <?php declare ( strict_types = 1 ); error_reporting ( E_ALL ); json_decode( '{"ID":"2"}', 1 ); PHP: Fatal error: Uncaught TypeError: json_decode(): Argument #2 ($associative) must be of type ?bool, int given in
У меня все пашет в error_reporting(-1); и пока не замечал такого. PHP8.0 даже нотиса нет хотя другие нотисы естественно есть. Как воспроизвести? Ваш код не выдает ошибок. Какая версия пхп?
error_reporting(-1); - это показывать все без исключения ошибки. К чему сарказмы? Я конечно поищу собаку. Интересный момент.
PHP: ini_set ( 'error_log', __DIR__ . '/error.log' ); Аминь -1 --- Добавлено --- Аминь по всему твоему коду, на нотисы и фаталити.
Ну другие нотисы, фаталили и бруталити показывает исправно. Ладно, поищу что к чему. На 8.0 по крайней мере пашет еще. На всякий случай переделаю на true уже. P.S. нашел косяк. На 8-ке еще пахало, но нотисы эти сливало. Хорошо когда несколько голов обсуждают.
Причем тут PHP8 ? Когда строгая типизация не требуется по умолчанию - PHP интепретатор изначально доводит рукожопные типы, от кодеров, в нужный формат, по требованию функций. Это во всех версиях ( на сколько известно мне ).
Если следовать declare(strict_types = 1); то все высвечивает. Пхп тут не при чем, просто не обращал внимания. Сейчас продекларирую и пофиксю везде.
Вот поэтому я не ставлю эту фигню. Как-то php, не приводящий сам туда сюда типы, для меня уже не php. Когда захочу сверхстрогой типизации, перейду на джаву ))
Вот и я сейчас второй день читаю нужна ли мне эта строгая типизация хотя бы для части классов, или толку от нее не будет. Инфы мало, но понимание как ее юзать конечно же есть полное. Только смысла пока до конца не вижу за исключением более удобного документирования и подстраховки от редкого случая несовпадения типов при отработке алгоритма. Для документирования удобны докблоки от документора, а со строгой типизацией получается двойное документирование, но и при этом некая плюшка или говнюшка, еще не ясно что именно. Если начать строго типизировать все классы разом у себя в проекте, то можно быстро попасть на баги, которые нужно будет отработать за какое то время. Это не так страшно, и в целом переход будет сделан за относительно быстрый срок. Но можно это делать и постепенно. Другой вопрос - за ним будущее или это очередной сахар, который мало применяют нынче и не ясно как с ним будет в будущем? Если будущее за ним, то и разрабы пхп пойдут на усиление работ с типизацией в будущем, и поэтому лучше начать сейчас заранее. С другой стороны, если это делается чтобы отбить докблоки, то как же тогда PSR-5/PSR-19, и уже внедренные инструменты в IDE, а также описательная часть метода, которой пока нет в пхп как стандарта (что занял докблок от документора и вполне красиво)? Мне кажется что это тенденция на усиление типизации, так как с каждой новой версией пхп гайки подвинчиваются. Есть идеи? Но если юзать это в качестве качественной документации в будущем, то этот вариант выигрывает у документора хотя бы тем, что метод не запустится если к примеру не верно указал выходные значения, а документор спокойно пропустит это и описательная часть будет не полная по сути с ним. Фишка конечно интересная в плане более четкой отработки и документирования методов и классов, а документор пока дополнит остаток. Желательно узнать мнение коллег конечно же, кто и что думает на этот счет.
Строгая типизация, как и PHP: error_reporting(E_ALL); отсеивает кучу ошибок в коде. Объём док-блоков вторичен. Наверное, карма хороша, коли такие случаи редки, особенно, когда код вояет юный падаван.
Да сделать во всем коде строгую типизацию - это довольно не сложно. От этого не станешь сразу на ступень выше эволюции. Но если практика идет к этому, то да, сделаю... Работы там не так много. Около 70 классов перевести на строгую типизацию. Большая часть сразу работает после ее включения и требуется только дополнить описательную часть по методам, и на некоторой части требуются корректировки (в частности json). Хотелось бы глянуть что ваяет юный бидон. А то так он много себя восхваляет. А до моего возраста еще дорасти нужно. Я еще на спектрумах первые проги писал.
Т.е всё что мы писали до семёрки, это говнокод? Ерунда. Я, правда, достаточно часто на небольших проектах допускаю и откровенный говнокод, в виде нарушения логики слоёв или копипасты, когда осознаю, что это не критично для проекта. Так же из типизацией - где-то я ставлю типы, где-то нет. Где-то мне хочется, чтоб строка автоматом в инт преобразовалась при этом, без моего участия. Для меня нерушимых догм в программировании не бывает, всё зависит от размеров проекта, требований заказчика, и т.п. Мне как-то попался на доработку проект, где человек перестарался с паттернами, слоями и прочей лабудой. Он его год пили, потом уволился, и меня за него посадили. То ещё удовольствие. Заказчик просит одно поле в таблицу добавить - и мне надо его прописать в валидаторе, в модели, и ещё в декораторе модели. Конечно, эти декораторы были неправильно сделаны, поскольку фактически не декорировали, а прописывали ещё раз все поля, но это я к тому, что пытаться строго следовать теориям всем - не всегда гуд.
Я с этим согласен. Сегодня все кричат что такой паттерн - это истина... Сделал так, через год все кричат что тот паттерн что ты сделал в том году - это прошлый век, и сиди теперь переписывай рабочий код на новый newPattern потому что это уже не модно и все делают по другому.... Т.е. по факту рабочий код перепиливаешь на тот же рабочий код по-новому. И хорошо когда от этого есть толк, а когда не факт что он есть? А по факту шашечки или ехать? Есть предел нормальности кода, но вылизывать в угоду каждому чиху - это значит стоять на месте. Нужно уметь определять меру. Чрезмерный паттернизм-идеализм так же страшен как и чрезмерный говнокод. Должен быть баланс, который оставит время развитию функционала проекта, а не только красивые шашечки. Да и объективно есть причины. Сделал строгую типизацию с mixed или перечислением типов через | (а оно без него и не нужно, так как миксед и перечисления давно нужны были), сразу попал с PHP 7.2 на минимум PHP 8.0.... А это может быть большой проблемой для многих проектов, так как уменьшит охват аудитории. И при этом я теперь рад что я не говнокодер? По сути наговнокодил, так как проект резко потеряет в аудитории и начальство даст по башке за такие инновации... Все относительно.