отключение элементов (php)

root@localhost:~#

Гений мысли
VIP
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Сообщения
975
Розыгрыши
0
Решения
4
Репутация
295
Реакции
551
Баллы
1 813
недавно начал учить php
есть функция которая парсит из базы итемы, я сделал условия которые будут отключать некоторые символы в случае если допустим итем 1 - у него отключается вывод количества, или если итем не точенный у него не выводится заточка
пример
1656315373050.webp
1656315384636.webp
так вот, хотелось бы узнать насколько это костыльно у меня это реализовано, можно ли так пускать на лайв, и как лучше в целом это сделать?
кусок кода:
PHP:
    while ($row = $result->fetch(PDO::FETCH_OBJ)){
        $before = '(';
        $after = ')';
        $plus = ' +';
        if($row->enchant == 0){
            unset ($row->enchant);
            unset ($plus);
        }
        if($row->amount == 1){
            unset ($row->amount);
            unset ($before);
            unset ($after);
        }

            echo '<a><span data-title="' . $row->item_name . ' ' . $before . $row->amount . $after .  $plus . $row->enchant . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
    }
 

недавно начал учить php
есть функция которая парсит из базы итемы, я сделал условия которые будут отключать некоторые символы в случае если допустим итем 1 - у него отключается вывод количества, или если итем не точенный у него не выводится заточка
пример
Посмотреть вложение 44199
Посмотреть вложение 44200
так вот, хотелось бы узнать насколько это костыльно у меня это реализовано, можно ли так пускать на лайв, и как лучше в целом это сделать?
кусок кода:
PHP:
    while ($row = $result->fetch(PDO::FETCH_OBJ)){
        $before = '(';
        $after = ')';
        $plus = ' +';
        if($row->enchant == 0){
            unset ($row->enchant);
            unset ($plus);
        }
        if($row->amount == 1){
            unset ($row->amount);
            unset ($before);
            unset ($after);
        }

            echo '<a><span data-title="' . $row->item_name . ' ' . $before . $row->amount . $after .  $plus . $row->enchant . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
    }
Я бы конечно сделал вот так.
Кода меньше и код гораздо читаемый, как мне кажется.

PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    $enchantStr = '';
    $amountStr = '';
    
    if($row->enchant > 0)
        $enchantStr = ' +' . $row->enchant;
    
    if($row->amount > 0)
        $amountStr = ' (' . $row->amount . ')';

    echo '<a><span data-title="' . $row->item_name . $amountStr . $enchantStr . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}

Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
 
Я бы конечно сделал вот так.
Кода меньше и код гораздо читаемый, как мне кажется.

PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    $enchantStr = '';
    $amountStr = '';
   
    if($row->enchant > 0)
        $enchantStr = ' +' . $row->enchant;
   
    if($row->amount > 0)
        $amountStr = ' (' . $row->amount . ')';

    echo '<a><span data-title="' . $row->item_name . $amountStr . $enchantStr . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}

Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
хм, тоже неплохо, не додумался почему то
 
хм, тоже неплохо, не додумался почему то
Я просто уже не помню до конца, но если включить варнинги в php, скорее всего будет ругаться на обращение к перменной которая не установлена. А вы как раз обращаетесь к переменным которые удалили функцией unset

Попробуйте включить ошибки:
ini_set('display_errors', 1);
error_reporting(E_ALL);

и отработать свой код, будут ли варнинги.
 
или так
PHP:
$items = $result->fetchAll( PDO::FETCH_OBJ );

foreach ( $items as $item )
{
    $title = $item->item_name;
    
    if ( $item->enchant > 0 )
        $title .= ' +' . $item->enchant;
    
    if ( $item->amount > 0 )
        $title .= ' (' . $item->amount . ')';
    
    echo '<a><span data-title="' . $title . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
 
или так
PHP:
$items = $result->fetchAll( PDO::FETCH_OBJ );

foreach ( $items as $item )
{
    $title = $item->item_name;
   
    if ( $item->enchant > 0 )
        $title .= ' +' . $item->enchant;
   
    if ( $item->amount > 0 )
        $title .= ' (' . $item->amount . ')';
   
    echo '<a><span data-title="' . $title . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
а почему не while? просто из интереса спрашиваю
 
Сильно костьільно из-за чистого пхп).

У тебя есть операторьі ?? ?:
зачем тебе делать ансет перед вьіводом?

Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    echo '<a><span data-title="' . $row->item_name . ($row->enchant > 0 ? ' +' . $row->enchant : '') . ($row->amount > 0 ? ' (' . $row->amount . ')' : '') . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
Может нужно будет добавлять какие-то еще лебльі или т.п.
То можно сделать вот так
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    $data_titles = [];

    $data_titles[] = $row->item_name;
    if($row->enchant > 0)
        $data_titles[] = '+' . $row->enchant;

    if($row->amount > 0)
        $data_titles[] = '(' . $row->amount . ')';

    // Можно добавить еще что-то в $data_titles.
    echo '<a><span data-title="' . implode(' ', $data_titles) .'"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
 
Сильно костбьіли.

У тебя есть операторьі ?? ?:
зачем тебе делать ансет перед вьіводом?

Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    echo '<a><span data-title="' . $row->item_name . ($row->enchant > 0 ? ' +' . $row->enchant : '') . ($row->amount > 0 ? ' (' . $row->amount . ')' : '') . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
Может нужно будет добавлять какие-то еще лебльі или т.п.
То можно сделать вот так
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    $data_titles = [];

    $data_titles[] = $row->item_name;
    if($row->enchant > 0)
        $data_titles[] = '+' . $row->enchant;

    if($row->amount > 0)
        $data_titles[] = '(' . $row->amount . ')';

    // Можно добавить еще что-то в $data_titles.
    echo '<a><span data-title="' . implode(' ', $data_titles) .'"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
 
я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
У тебя сразу идет вьівод.
Собери все в 1 и вьіведи в нужном месте еще)
 
Сильно костьільно из-за чистого пхп).

У тебя есть операторьі ?? ?:
зачем тебе делать ансет перед вьіводом?

Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    echo '<a><span data-title="' . $row->item_name . ($row->enchant > 0 ? ' +' . $row->enchant : '') . ($row->amount > 0 ? ' (' . $row->amount . ')' : '') . '"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
Может нужно будет добавлять какие-то еще лебльі или т.п.
То можно сделать вот так
PHP:
while ($row = $result->fetch(PDO::FETCH_OBJ)){
    $data_titles = [];

    $data_titles[] = $row->item_name;
    if($row->enchant > 0)
        $data_titles[] = '+' . $row->enchant;

    if($row->amount > 0)
        $data_titles[] = '(' . $row->amount . ')';

    // Можно добавить еще что-то в $data_titles.
    echo '<a><span data-title="' . implode(' ', $data_titles) .'"><img src="/img/items/' . $row->item_type . '.jpg" width="32" height ="32"></span></a>';
}
Вы принципиально отключили русский язык на телефоне?)
 
Вы принципиально отключили русский язык на телефоне?)
Да, єтот портал единстенное место, где я общаюсь на єтом язьіке.
Можно каждый раз копировать букву от куда-то, но мне лень.
 
Посмотрите в сторону MVC , на таком подходе далеко не уедешь :)
 
пожалуй когда хотя бы месяца 3 опыта будет
Если синтаксис знаешь, то лучше не терять время, и сразу почитать про паттерны проектирования. MVC это некая база для небольшой веб разработки на PHP, которая не должна вызвать сложностей, так как очень проста в понимании.
 
Если синтаксис знаешь, то лучше не терять время, и сразу почитать про паттерны проектирования. MVC это некая база для небольшой веб разработки на PHP, которая не должна вызвать сложностей, так как очень проста в понимании.
с синтаксисом пока проблемы, я начал пилить некое подобие статистики сервера для себя, пилил на mysqli, потом решил перекинуться на pdo, потом понял что лучше делать функциями
по сути я еще даже циклы толком не освоил, из того что я уже понял это работа с массивами, условия, работа с БД, сессии, функции и прочая мелочь
 
 
с синтаксисом пока проблемы, я начал пилить некое подобие статистики сервера для себя, пилил на mysqli, потом решил перекинуться на pdo, потом понял что лучше делать функциями
по сути я еще даже циклы толком не освоил, из того что я уже понял это работа с массивами, условия, работа с БД, сессии, функции и прочая мелочь
Тогда лучше всё такие основы выучить, и долго не задерживаться на функциональном программировании, изучайте ООП. Наступит переломный момент, когда вам покажется что перед вами открылся целый мир=) Потом конечно вы сломаете ноги и руки изучая паттерны, и запутаетесь еще сильнее чем вначале пути, но это уже совсем другая история.
 
Тогда лучше всё такие основы выучить, и долго не задерживаться на функциональном программировании, изучайте ООП. Наступит переломный момент, когда вам покажется что перед вами открылся целый мир=) Потом конечно вы сломаете ноги и руки изучая паттерны, и запутаетесь еще сильнее чем вначале пути, но это уже совсем другая история.
пока еще не познал смысл ооп, работая с pdo примерно понимаю как это должно работать, но применения у себя еще не нашел, возможно когда процедурный стиль освою пойду ооп учить, а пока буду обучаться)
 
Назад
Сверху Снизу