функция — Как я могу уменьшить строки кода в PHP?

Я веб-разработчик, и я пишу код в рамках PHP / Laravel. Я старался следовать рекомендациям по написанию кода, и я знаю, что это хорошая практика — писать 15-20 строк кода в функциях и максимум 200 строк кода в классах. Но каждый раз я пишу как минимум 40-50 строк в функции. например, здесь фрагмент кода, который я написал, чтобы получить подробную информацию о клиенте и назначенных пользователях.

public function preMessageSend($client, $assigned)
{
$ticket_number = $client->ticket_number;
$title = $client->title;
$department = $client->department;
$priority = $client->priority;
if ($client->first_name !== null || $client->first_name !== '') {
$client_name = $client->first_name." ".$client->last_name;
} else {
$client_name = $client->username;
}
if ($client->email !== '' || $client->email !== null) {
$client_email = $client->email;
} else {
$client->email = 'Not available';
}
if($client->mobile !== null || $client->mobile !== '') {
$client_mobile = $client->code."".$client->mobile;
} else {
$client_mobile = 'Not available';
}
if($assigned != null) {
if ($assigned->first_name !== null || $assigned->first_name !== '') {
$assigned_name = $assigned->first_name." ".$assigned->last_name;
} else {
$assigned_name = $assigned->username;
}
if ($assigned->email !== '' || $assigned->email !== null) {
$assigned_email = $assigned->email;
} else {
$assigned->email = 'Not available';
}
if($assigned->mobile !== null || $assigned->mobile !== '') {
$assigned_mobile = $assigned->code."".$assigned->mobile;
} else {
$assigned_mobile = 'Not available';
}
if ($assigned->address !== null || $assigned->address !== '') {
$assigned_address = $assigned->address;
} else {
$assigned_address = 'Not available';
}
$this->sendMessageWithAssigned($ticket_number, $title, $department, $priority, $client_name, $client_email, $client_mobile, $assigned_name, $assigned_email, $assigned_mobile, $assigned_address);
} else {
$this->sendMessageWithoutAssigned($ticket_number, $title, $department, $priority, $client_name, $client_email, $client_mobile);
}

Пожалуйста, скажите мне, как я могу уменьшить loc в своем классе и функциях и как лучше всего избегать написания таких длинных функций.
ТИА

2

Решение

Вместо

if ($client->first_name !== null || $client->first_name !== '') {
$client_name = $client->first_name." ".$client->last_name;
} else {
$client_name = $client->username;
}

Вы могли бы сделать:

$client_name = ($client->first_name !== null || $client->first_name !== '') ? $client->first_name." ".$client->last_name : $client->username;
0

Другие решения

Как уже предлагали другие, вы можете использовать empty() вместо != null а также != '' чеки. Кроме того, вы можете опустить else участие в большинстве утверждений, например:

$assigned_name = $assigned->username;
if (!empty($assigned->first_name)) {
$assigned_name = $assigned->first_name." ".$assigned->last_name;
}

Это устанавливает $assigned_name к твоему бывшему else значение по умолчанию и если условие выполнено $assigned_name перезаписывается Я не рекомендую использовать троичный оператор, потому что это не так хорошо читаемый ИМО.

В любом случае, я бы не стал слишком беспокоиться о строках кода, если код читабелен и эффективен.

0

Прежде всего, null а также '' является правда за empty() так что вы могли бы сделать:

if (!empty($client->first_name)) { // if not empty
$client_name = $client->first_name." ".$client->last_name;
} else {
$client_name = $client->username;
}

Тогда вы также можете использовать троичный оператор:

$client_name = !empty($client->first_name) ? $client->first_name." ".$client->last_name : $client->username;

Тогда для немного заявления есть также or заявление доступно:

$client_email     = $client->email or 'Not available';
$client_mobile    = $client->code . $client->mobile or 'Not available';
$assigned_address = $assigned->address or 'Not available';

Эти or заявления только равно:

if(!empty($assigned->address)){
$assigned_address = $assigned->address;
} else {
$assigned_address = 'Not available';
}

// Or the equivalent ternary
$assigned_address = !empty($assigned->address) ? $assigned->address : 'Not available';

И что я имею в виду для «некоторых» это то, что:

$client->first_name = null;
$client->last_name  = null;
echo empty($client->first_name." ".$client->last_name); // false
echo isset($client->first_name." ".$client->last_name); // true

не пусто, даже если обе переменные равны нулю, из-за " " пространство, которое сделало бы это isset()

Теперь будьте осторожны с теми или утверждениями !empty() не всегда дает противоположные результаты, как isset() где isset([]) верно и где empty([]) тоже верно.

0
По вопросам рекламы [email protected]