Wątek przeniesiony 2023-01-03 18:42 z PHP przez Riddle.

"Super" jakość kodu na produkcji

0

Takie coś znalazłemn dziś u nas na serwerze produkcyjnym. Tak kurde. A bugtracker naliczył 24 zgłoszenia dependecyDisk

$value = $value !== null ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8') : '';

Pierwsze zawsze będzie true, drugie to jakiś mindfuck: separacja htmlspecialchars to, przepraszam, gdzie autor zjadł? czemu formatowanie ustawione na sztywno utf-8? Inne utf-y to co? No i w końcu co robią spacje po obu stronach dwukropka?

6

Hejt na PHP zawsze na propsie.
Zacznijmy od spacji:

The conditional operator, also known simply as the ternary operator, MUST be preceded and followed by at least one space around both the ? and : characters:

$variable = $foo ? 'foo' : 'bar';
Żródło https://www.php-fig.org/psr/psr-12/

Pierwsze zawsze będzie true

A skąd wiesz, może w kodzie i dziś nigdy nullem nie jest ale może kiedyś mogło być i ktoś nie zrefaktoryzował, a może nawet ciągle może być a sam o tym nie wiesz. Niestety tak jest jak nie ma declare(stricta_types =1)

4

Pierwsze zawsze będzie true

bez pozostałej części kodu ciężko stwierdzić

drugie to jakiś mindfuck: separacja htmlspecialchars to, przepraszam, gdzie autor zjadł?

nie siedzę w php, nie wiem co to "separacja htmlspecialchars"

czemu formatowanie ustawione na sztywno utf-8? Inne utf-y to co?

jakie inne utf-y? o czym ty piszesz? używa się dziś prawie wyłącznie UTF-8, ciężko też z tego kodu wywnioskować do czego to value służy i gdzie jest używane, ale prawdopodobnie żadne wtf. UTF-8 to standard któremu niczego nie brakuje i raczej nieprędko się zmieni. UTF-16 jest ewentualnie stosowany tam gdzie jest wymagana sztywna długość stringa, sztywna ilość zarezerwowanej pamięci na dane i przyspieszenie operacji typu policzenie długości stringa, odwoływanie do znaków w tekście po indeksie itp.
Jedyne co to widzę że UTF-8 to domyślna wartość tego parametru więc można spokojnie pominąć.

No i w końcu co robią spacje po obu stronach dwukropka?

Zawsze i wszędzie się tak pisało, jak inaczej? Na szybko googlując zasady panujące w php, przykładowe kody z dużych bibliotek i odpowiedzi na stackoverflow mogę stwierdzić że wszyscy w ten sposób piszą. Jak nie dasz spacji przed : to wygląda jak etykieta goto.

Ewentualnie można to podzielić na linie, najładniej zaczynając linijki od ? i ::

$value !== null
    ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8')
    : '';

jedynym wtf-em w tym kodzie to mutowanie zmiennej, fuj

Jest tu w ogóle jakieś pytanie? Może chciałeś to umieścić w tym wątku: Programistyczne WTF jakie Was spotkały

4
wojtekxtx napisał(a):
$value = $value !== null ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8') : '';

Pierwsze zawsze będzie true,

Nie wiesz tego, jeśli $value jest null to nie.

No chyba że faktycznie nie może być nullem, to wtedy ternary nie ma sensu.

drugie to jakiś mindfuck: separacja htmlspecialchars to, przepraszam, gdzie autor zjadł?

Separacja czego? Nie wiem co masz na myśli.

wojtekxtx napisał(a):

czemu formatowanie ustawione na sztywno utf-8? Inne utf-y to co?

Bo dana wejściowa widocznie jest w UTF-8 i parametryzacja tego to niepotrzebny koszt i zachód. YAGNI.

wojtekxtx napisał(a):

No i w końcu co robią spacje po obu stronach dwukropka?

Domyślne formatowanie w 99.999% edytorów w ternary.

2
wojtekxtx napisał(a):

Takie coś znalazłemn dziś u nas na serwerze produkcyjnym. Tak kurde. A bugtracker naliczył 24 zgłoszenia dependecyDisk

@wojtekxtx: uważam, że czepiasz się bezpodstawnie, @Riddle dobrze Ci napisał dlaczego.

Miałem kiedyś w zespole takiego jednego seniora, który ciągle się czegoś czepiał nie mając racji, nie dało się pracować.

4

Ja też nie widzę nic dziwnego w tym kodzie. Poza tym to tylko jedna linijka. @wojtekxtx czy mógłbyś napisać jako przykład, jak Twoim zdaniem powinna wyglądać ta linijka? Albo może wrzuć cały kod tej metody/funkcji?

Napisz też coś więcej o tych 24 dependency disk z bugtrakcera. Prawdę powiedziawszy, pierwszy raz słyszę o takim pojęciu

0

jak Twoim zdaniem powinna wyglądać ta linijka?

Jak powinna wyglądać? Powinna być rozbita na kilka linijek tak jakto zrobił @obscurity w poście wyżej; dużo ładniej, czytelniej, no i nie trzeba pisać tych zrąbanych phpdocs bo wszystko jest jasne i klarowne.

4

imo nie ma potrzeby aby to rozbijać na wiele linijek, bo jest to dość krótkie, lol.

a ? b : c też byś chciał rozbić?

6
wojtekxtx napisał(a):

No i w końcu co robią spacje po obu stronach dwukropka?

Separują wyrażenia/instrukcje/literały od operatora. Mam nadzieję, że pomogłem.

0

dużo ładniej, czytelniej, no i nie trzeba pisać tych zrąbanych phpdocs bo wszystko jest jasne i klarowne

Wiesz, że te phpdocs są potrzebne do np. statycznej analizy kodu i mogą być przydatne szczególnie gdy projekt był migrowany ze starej wersji PHP, nie ma jeszcze deklaracji typów jak pisałem. Jak byś używał np. PHPstan jako analizy statycznej oraz PHPCSFixer jako analizatora sposobu pisania kodu to byś zobaczył. Wtedy ten kod bez spacji czyli niezgodny z PSR mógłby w ogóle nie przejść przez pipline.
No i nie wyjaśniłeś czemu PSR jako standard cofa nas o 20 lat. BTW PSR-12 ma chyba gdzieś z 10 - 11 lat chociaż nie wiem kiedy powstał draft, ale wątpię by było to 20 lat temu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1