2016-09-23 8 views
2

나는 웹 개발자이며 PHP/Laravel 프레임 워크로 코드를 작성합니다. 필자는 코드 작성을위한 모범 사례를 따르기 위해 노력해 왔으며 함수에 최대 15 줄의 코드를 작성하고 클래스에 최대 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를 줄이고 같은 긴 함수를 작성 피하기 위해 가장 좋은 방법은 무엇인가 할 수있는 방법을 가르쳐주세요. TIA

+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; 
} 

당신은 할 수 :

if (!empty($client->first_name)) { // if not empty 
    $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'' 그래서 당신이 할 수 empty()에 대한 true입니다 당신은 또한 t를 사용할 수 있습니다. 그는 삼항 연산자 :

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

or 문이다 같음 : 다음

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

일부 문에 사용할 수있는 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 

는 두 변수로 인해 !empty() 항상 isset() 곳으로 정반대의 결과를 제공하지 않기 때문에이 isset()

이제 그 또는 문에주의 할 것 " " 공간으로, null의 경우에도 비어 있지 isset([])이 참이고 empty([])도 참입니다.

0

다른 제안 사항에 따라 != null!= '' 수표 대신 empty()을 사용할 수 있습니다. 또한, 당신은 기본적으로 : 예컨대, 당신의 전 else

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

이 설정 $assigned_name를 대부분의 문에서 else 일부를 생략 할 수 있으며, 조건이 $assigned_name를 충족되면 덮어 쓰기됩니다. 나는 읽을 수있는 IMO가 아니기 때문에 삼항 연산자를 사용하지 않는 것이 좋습니다.

어쨌든 코드가 읽기 쉽고 효율적이면 코드 줄에 대해 너무 걱정하지 않아도됩니다.