Показать сообщение отдельно

  #2  
Старый 28.10.2019, 13:35
kick
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами: 5952720

Репутация: 6527


По умолчанию

Вообще начнём с самой магии)

PHP:


Код:
public
$project_id
=
25
;
public
$session_id
=
false
;
public
$sid
=
251
;
и теперь самое прикольное

PHP:


Код:
public
function
__construct
(
$session_id
=
false
,
$sid
=
false
,
$pid
=
false
)
{
if
(
$session_id
!==
false
)
$this
-
>
session_id
=
$session_id
;
if
(
$sid
!==
false
)
$this
-
>
sid
=
$sid
;
if
(
$pid
!==
false
)
$this
-
>
project_id
=
$pid
;
}
Оригинальное решение) Каким это магическим образом у нас типы данных вида integer, ведут в boolean? Я конечно понимаю, что пэхапе не сильно типизированный язык. Но это бред и ещё так сравнивать, когда тождественно не равно.

Далее самое интересное, а автор знает про правило, что большое количество аргументов является плохим тоном в любом языке?

Но мы идём дальше и смотрим на методы. Разве трудно ловить реквесты, и фильтровать что в них мы получили? И всё. А теперь самое интересное весь этот набор функций можно просто выкинуть. Это тупо копипаст кода и нарушение принципа DRY. За этот принцип в серьезных компаниях просто не принимают и с тобой попрощаются.

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

PHP:


Код:
public
function
subscription
(
$email
)
{
$this
-
>
act
=
'subscription'
;
$this
-
>
method
=
'Linage2AccountsAuth'
;
$this
-
>
data
=
array
(
'subscription-email'
=
>
$email
,
)
;
return
$this
;
}
public
function
register
(
$prefix
,
$login
,
$email
,
$password
,
$password_verify
,
$referal
=
''
,
$utm_source
=
'APPLICATION'
,
$id_promo
=
0
,
$promo_bonus
=
array
(
)
)
{
$this
-
>
act
=
'register'
;
$this
-
>
method
=
'Linage2AccountsAuth'
;
$this
-
>
data
=
array
(
'register-account'
=
>
$prefix
.
$login
,
'register-email'
=
>
$email
,
'register-password'
=
>
$password
,
'register-password-verify'
=
>
$password_verify
,
'register-referal'
=
>
$referal
,
'utm_source'
=
>
$utm_source
,
'promo'
=
>
$id_promo
,
'promo_bonus'
=
>
$promo_bonus
,
)
;
return
$this
;
}
public
function
create_game_account
(
$prefix
,
$login
,
$password
,
$password_verify
,
$utm_source
=
'APPLICATION'
)
{
$this
-
>
act
=
'create_game_account'
;
$this
-
>
method
=
'Linage2AccountsAuth'
;
$this
-
>
data
=
array
(
'register-account'
=
>
$prefix
.
$login
,
'register-password'
=
>
$password
,
'register-password-verify'
=
>
$password_verify
,
'utm_source'
=
>
$utm_source
,
)
;
return
$this
;
}
всегда, у нас идёт одно и тоже и что за магическая переменная act? Почему не назвать для всех подробно и нормально action? Но ладно, я приведу простой пример как это можно всё уменьшить

PHP:


Код:
/**
     * @param $action
     * @param $method
     * @param array $data
     * @return $this
     */
public
function
sendAction
(
$action
,
$method
,
$data
=
[
]
)
{
$this
-
>
act
=
$action
;
$this
-
>
method
=
$method
;
$this
-
>
data
=
$data
;
return
$this
;
}
Всё то же самое, но всё решилось 5 строчками кода лишь передавая необходимые данные и их разбирая. У нас идёт каждый раз один и тот же код, только меняется action и method. Какой смысл и практичное применение? Не какого. Какой тут, мы передали необходимые данные и массив и всё готово без кучи магических переменных, без кучи лишнего и подобия вида:

Код:
$utm_source = 'APPLICATION', $id_promo = 0, $promo_bonus = array()
Что за такой источник? Зачем передавать? Ладно бы ещё как то реквесты брало или ещё как то. Или просто по нормальному приведено, но какой от этого смысл?

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

Эх... зачем использовать отличные либы, когда можносделать костыли самому?
Зачем юзать Guzzle ... Есть же curl_init();
ну тут не обязательно и использовать Guzzle, он по сути подойдет для проекта где используется с не 1 апи и не только. Но можно и curl, для быстрых и простых задач подойдёт. А так да стоит в серьезном приложение использовать его и без него никуда. На дворе почти зарелизенный php 7.4, начиная с 5.4 появились нормальные массивы вида [], любой современный фреймворк работает уже на минимум 7.2 так 7.1 в декабре закончится поддержка, а мы досих пор используем фразу array().

Код:
public $gzc = false;//сжатие
А трудно назвать gzip? где в слове gzip есть gzc? в чём проблема назвать?

Да тут много чего и что необходимо рефакторить и переписывать.

Никакого согласования в именнование переменных нет. А это опять таки нарушение PSR стандартов. Тут недавно была тема очень интересная от @Solution.

https://mmo-dev.info/threads/Нужен-совет-бывалых-php.11363/И там были весьма полезные сообщения с полезными ссылками, продублирую их просто тут:

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

GitHub - piotrplenik/clean-code-php: :bathtub: Clean Code concepts adapted for PHP

:bathtub: Clean Code concepts adapted for PHP. Contribute to piotrplenik/clean-code-php development by creating an account on GitHub.

github.com


GitHub - alexeymezenin/laravel-best-practices: Laravel best practices

Laravel best practices. Contribute to alexeymezenin/laravel-best-practices development by creating an account on GitHub.

github.com


https://www.sonarsource.com/docs/Cog...Complexity.pdf

PHP: Hypertext Preprocessor

PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

www.php.net

PHP Standards Recommendations - PHP-FIG

We're a group of established PHP projects whose goal is to talk about commonalities between our projects and find ways we can work better together.

www.php-fig.org


А вот и наши любимые стандарты для PHP
 
Ответить с цитированием