HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 27.06.2022, 11:38
root@localhost:~#
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами: 5175542

Репутация: 548


По умолчанию

недавно начал учить php

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

пример

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

кусок кода:

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
'
item_name
.
' '
.
$before
.
$row
-
>
amount
.
$after
.
$plus
.
$row
-
>
enchant
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
 
Ответить с цитированием

  #2  
Старый 27.06.2022, 12:17
Mex-Vision
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами: 5368054

Репутация: 448


По умолчанию

Цитата:
Сообщение от root@localhost:~#  

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

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

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
'
item_name
.
' '
.
$before
.
$row
-
>
amount
.
$after
.
$plus
.
$row
-
>
enchant
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
Я бы конечно сделал вот так.

Кода меньше и код гораздо читаемый, как мне кажется.

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
'
item_name
.
$amountStr
.
$enchantStr
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
 
Ответить с цитированием

  #3  
Старый 27.06.2022, 12:19
root@localhost:~#
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами: 5175542

Репутация: 548


По умолчанию

Цитата:
Сообщение от Mex-Vision  

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

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
'
item_name
.
$amountStr
.
$enchantStr
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
хм, тоже неплохо, не додумался почему то
 
Ответить с цитированием

  #4  
Старый 27.06.2022, 12:22
Mex-Vision
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами: 5368054

Репутация: 448


По умолчанию

Цитата:
Сообщение от root@localhost:~#  

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

Попробуйте включить ошибки:

ini_set('display_errors', 1);

error_reporting(E_ALL);

и отработать свой код, будут ли варнинги.
 
Ответить с цитированием

  #5  
Старый 27.06.2022, 12:29
òbiòbi верифицированный пользователь.
Новичок
Регистрация: 09.03.2017
Сообщений: 0
С нами: 4831039

Репутация: 1976
По умолчанию

или так

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
'
item_type
.
'.jpg" width="32" height ="32">'
;
}
 
Ответить с цитированием

  #6  
Старый 27.06.2022, 12:34
root@localhost:~#
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами: 5175542

Репутация: 548


По умолчанию

Цитата:
Сообщение от òbi  

или так

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
'
item_type
.
'.jpg" width="32" height ="32">'
;
}
а почему не while? просто из интереса спрашиваю
 
Ответить с цитированием

  #7  
Старый 27.06.2022, 12:37
òbiòbi верифицированный пользователь.
Новичок
Регистрация: 09.03.2017
Сообщений: 0
С нами: 4831039

Репутация: 1976
По умолчанию

Цитата:
Сообщение от root@localhost:~#  

а почему не while? просто из интереса спрашиваю
в данном случае не будет иметь значения, как больше нравится
 
Ответить с цитированием

  #8  
Старый 27.06.2022, 12:40
Desquire
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами: 5799746

Репутация: 1388


По умолчанию

Сильно костьільно из-за чистого пхп).

У тебя есть операторьі ?? ?:

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

Можно сделать несколько вариантов. ( один менее костьільний, второй)

Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)

PHP:


Код:
while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
echo
'
item_name
.
(
$row
-
>
enchant
>
0
?
' +'
.
$row
-
>
enchant
:
''
)
.
(
$row
-
>
amount
>
0
?
' ('
.
$row
-
>
amount
.
')'
:
''
)
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
Может нужно будет добавлять какие-то еще лебльі или т.п.

То можно сделать вот так

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
'
item_type
.
'.jpg" width="32" height ="32">'
;
}
 
Ответить с цитированием

  #9  
Старый 27.06.2022, 12:41
root@localhost:~#
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами: 5175542

Репутация: 548


По умолчанию

Цитата:
Сообщение от Desquire  

Сильно костбьіли.

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

Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)

PHP:


Код:
while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
echo
'
item_name
.
(
$row
-
>
enchant
>
0
?
' +'
.
$row
-
>
enchant
:
''
)
.
(
$row
-
>
amount
>
0
?
' ('
.
$row
-
>
amount
.
')'
:
''
)
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}
Может нужно будет добавлять какие-то еще лебльі или т.п.
То можно сделать вот так

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
'
item_type
.
'.jpg" width="32" height ="32">'
;
}
я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
 
Ответить с цитированием

  #10  
Старый 27.06.2022, 12:42
Desquire
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами: 5799746

Репутация: 1388


По умолчанию

Цитата:
Сообщение от root@localhost:~#  

я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
У тебя сразу идет вьівод.

Собери все в 1 и вьіведи в нужном месте еще)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.