Pull to refresh
4
0
NickyX3 @NickyX3

User

Send message

сменили версии php 5.4->5.6->7.0-7.2->8.0

Мы сменили в одном проекте версии с 5.0 до 8.3 исправив только create_function в preg_replace_callback с выходом 8.0 в паре мест на замыкание.

Все зависит от того как изначально написан php-код. В соседнем проекте так просто не было, но там и кодили его изначально очень странные персонажи (со странными решениями и любители Go в настоящее время, кхе-кхе)

if(array_key_exists("nonExistentKey", $a)) {return;}

Еще короче

if ( isset($a['nonExistentKey']) ) {...}}

 Я таки победил лень, написал демо код и проверил:

Я вам написал все варианты выше. Ассоциативные массивы кодируются как js object, индексные, включая пустые - как js array

Для начала задайте вопрос себе: в чем отличие ассоциативного массива от обычного с точки зрения логики, а не внутреннего устройства (которое в php, помнится, одинаковое)?

  1. Пустой массив не является ассоциативным. И поэтому кодируется как список [], так же как и непустой и не ассоциативный.

  2. Непустой ассоциативный кодируется как объект {}, потому что очевидно, по другому в js его не закодировать

  3. При чем тут принимающая сторона? Писать правильный код нужно кодирующей стороне

После компиляции tail становится худым донельзя

В этом и смысл, остается только то, что включено в дефолтное поведение и те классы и их наборы, которые есть в файлах через @apply или в верстке

Да. В этом и заключается весь смысл этой ветки

Увы. Смысл этой ветки в том, что люди, которым требуется объект на выходе – пихают вместо него массив, а потом говорят, что php говно.

Логика вообще полезная штука. Или Вы хотите оспорить утверждение, что ['a','b'] это «непустой массив»? Вы считаете что он «пустой» или что он «не массив»?

мы с вами

Оглянулся, я тут вроде один, не надо ко мне во множественном числе обращаться :-)

 тест на регулярки в go и php)

А что в go какие-то свой регулярки? КМК смысла сравнивать особо нет, в PHP libpcre/libpcre2 как и в 90% остального софта

От этого и синтаксис, как по мне, получается нелепый (непривычным на фоне остальных языков) - с этими вездесущими тэгами в начале файла,

Этот «нелепый» синтаксис на 80% совпадает с синтаксисом Java и C++

обязательными $ для переменных и т.п.

Ну один символ для всех переменных это не так уж и страшно, ничего такого. Поглядите в Perl, там $ для скаляров, @ для списков и % для хешей. Никто не жаловался

Речь шла про json_encode и пустые массивы. Которые действительно по умолчанию кодируются в список.

А что, непустые массивы кодируются во что-то другое?
В json объекты {} кодируются по-умолчанию ассоциативные массивы, простые же массивы (ок, они же и есть списки) кодируются как json списки [], так же как и пустые массивы (которые из за своей «пустоты» не являются ассоциативными).

Если уж бизнес логика @posledam желает получить в json именно пустой объект, то почему кто-то туда пихает массив? Где логика? Хотите пустой объект - пихайте пустой объект. А уж как его приготовить в php, через new \stdClass() или кастинг (object) [] не важно. Мне лично понятнее первое.

$a  = []; // пустой массив
$b  = ['m1','m2']; // не пустой массив
$c  = ['k1'=>'v1','k2'=>'v2']; // не пустой ассоциативный массив
$o  = new \stdClass(); // новый объект
$of = (object) []; // объект из массива через кастинг
echo json_encode(['a'=>$a,'b'=>$b,'c'=>$c,'o'=>$o,'of'=>$of],JSON_UNESCAPED_UNICODE);
{"a":[],"b":["m1","m2"],"c":{"k1":"v1","k2":"v2"},"o":{},"of":{}}

Еще раз: в случае tailwind и его "атомарных" классов "компилятор" в результирующий css сам сгенерит такую последовательность, чтобы именно последний, указанный (из взаимно-исключающих атомов) в верстке, применился.

Если, конечно, вы будете "компилировать" шаблоны и директивы, а не выкатите полный набор tw как есть

Чтоб в PHP получить в json_encode {} надо налепить туда объект как-то так

// чтоб получить {} надо сговнякать объект
$a = new \stdClass();
$a->foo = 'foo';
$a->bar = 'bar';

// а "плоский" список даст []
$b = ['foo','bar'];

echo json_encode(['a'=>$a,'b'=>$b]);
{"a":{"foo":"foo","bar":"bar"},"b":["foo","bar"]}

Я, честно говоря, хз как это можно не различать и говнякать всегда {}?

Опять не работает, почему-то не может переконвертить число в строку "Fatal error: Uncaught Error: Method User::__toString() must return a string value"

И что не так? Вы же за строгую типизацию? Соверешенно очевидно, что магический __toString должен возвращать именно string, а не int или что-то ещё

Или у нас есть css (scss) и php файлы. И тут и там упоминаются одни и те же html-классы. Только вот почему-то редактор php о том, что в css написано вообще не в курсе и автоподстановка названий классов там не работает

По крайней мере PHPStorm/IntelliJ IDEA отлично умеют в рамках как минимум одного проекта видеть стили в css и автодополнять их в html/php коде. Или если css включен в этом html файле

Так для php уже много лет массивы с [] и {} - одинаковое

Оно разное, так же как и в JS. Первое массив. Второе объект.

То что json_decode в php можно (и в 90% случаев так и используется) включить associative режим, когда все JS объекты будут возвращаться как массивы - это немного другое

Никакого встроенного веб-сервера нет, его придётся написать.

Ну строго говоря встроенный web-сервер в php всеже есть.
https://www.php.net/manual/ru/features.commandline.webserver.php

Но очевидное предупреждение как бы намекает

Внимание

Веб-сервер предназначен для помощи в разработке приложений. Он также может быть полезным в тестовых целях или для демонстрации приложения, запускаемого в полностью контролируемом окружении. Он не выполняет функции полноценного веб-сервера и не должен использоваться в общедоступных сетях.

Это не те трейты

Вмысле НЕ ТЕ?

На уровне "компиляции" tailwind применит только последний в списке

а вот в случае class="first second" — применятся оба.

В случае атомарных фреймворков типа tailwind в конструкции class="w-big w-small" будет применен именно последний. Ибо переопределение свойств и есть часть CSS

Когда-то мне тоже казалось, что php-фрейворки не нужны. Ну в принципе они не особо нужны для мелких проектов с одним разработчиком и его велосипедами.

Но вот в какой-то момент мы решили немного отрефакторить тот лютый легаси монолит, что писался разными людьми в разное время в течение 15+ лет. И если один из нас двоих (не я) еще чуть понимал, что там и как работало, то мне было сильно проще и быстрее взять и переписать один из древних разделов на сайте просто с нуля на Laravel. Попутно рефакторя в него же какие-то общие фичи типа регистрация-авторизация-профили и т.п. И теперь мы можем в принципе остальное довольно быстро переписывать под Laravel тупо не разбираясь как оно там раньше работало, а просто повторяя функционал, но во многом проще, быстрее и главное – единообразнее

в пых только недавно завезли трейты

Ничего, что трейты появились в PHP 5.4 аж 12 лет назад?

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, HTML Coding
Middle
Git
JavaScript
HTML
CSS
Adaptive layout
Web development
JQuery