2016-09-23 6 views
2

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

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 в моем классе и функций и каковы лучшие практики, чтобы избежать написания таких длинных функций. ТИА

+1

Первый вопрос: зачем вам присваивать все эти свойства объекта клиента локальным переменным? –

+0

Я думаю, что вы можете сделать пустую проверку вместо всех этих «не нулевых, а не пустых строк» ​​ – danopz

+0

вы можете переписать большинство ваших условий в тройной оператор один лайнер '$ client_mobile = ($ client-> mobile! == null || $ client-> mobile! == '')? $ client-> code. "". $ client-> mobile: 'Недоступно'; ' –

ответ

0

Вместо

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

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

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

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

$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

Как уже было предложено, вы можете использовать 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 переопределены. Я не рекомендую использовать тернарный оператор, потому что это не тот читаемый IMO.

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

Смежные вопросы