2013-07-28 3 views
0

내 응용 프로그램에 대한 로그인 기능을 완료하고 몇 줄에 trying to get property of non object을 수신 중입니다. 첫 번째 것은 user_data 객체 내부의 lock_date 객체 속성을 사용하여 is_user_locked 메소드에 대한 함수 호출을 수행하는 아래에 나와 있습니다. 이것이 의미하는 바는이 시점에서 작업 할 user_data가 없으므로 속성을 사용할 수 없다는 것을 의미합니다. 너무 많은 중첩 된 if 문을 사용하여 남용하지 않도록 어떻게해야하는지 궁금합니다.사용할 사용자 데이터가 없음

if (count($user_data) == 0) { 
    $output = array('content' => 'The user was not found in the database!', 'title' => 
       'User Not Found'); 
} 

if ($this->is_user_locked($user_data->lock_date)) { 
    $output = array('content' => 'This user account is currently locked!', 'title' => 
       'Account Locked'); 
} 

이유에 대한 의견이 있으십니까? 모든 제안이 도움이 될 것입니다.

+0

당신이 $의 user_data' 얻을 방법 '설명 할 수 없습니다.? –

+0

로그인 양식에서 사용자 이름을 사용하여 모델 db 호출을 실행하여 얻습니다. – user2576961

답변

1

내가 문 경우 너무 많은 중첩 사용하지 남용을 할 수 있도록 내가이 차지하는 방법을 알고 궁금 경우

Terinary 연산자를 방지하기 위해 사용할 수 있습니다.

어때?

if($user_data) { 
    // $user_data contains something so let's proceed 
    if ($this->is_user_locked($user_data->lock_date)) { 
     $output = array('content' => 'This user account is currently locked!', 'title' => 'Account Locked'); 
    } 
} else { 
    // Nothing in $user_data so throw Exception or display error 
    $output = array('content' => 'The user was not found in the database!', 'title' => 
       'User Not Found'); 
} 

이 부분은 link을 참조하십시오.

if($var): same as $var == NULL. 
+0

이렇게하면 중첩 된 if가 너무 많아 질 것입니다. – user2576961

+0

그건 너에게 달렸어. 하지만 최소한 그'$ user_data' 객체가 메소드를 호출하기 전에 null이되는 것을 막아야합니다. –

+0

일찍 퇴장하는 것은 어떻습니까? 당신은'if (! $ user_data) {exit(); }'코드 상단에 가드 역할을합니다. 그것은 중첩을 줄입니다. –

1

$user_data->lock_date$user_data['lock_date']이어야합니다. 내가 게시 한 코드로 100 % 확실하지는 않지만 배열 요소를 잘못 참조하고있는 것처럼 보입니다. 문

$user_data === null ? "it's null" : "otherwise it's not"; 
+0

사용자 데이터가 없음이 문제가되지 않습니다. – user2576961

+0

'$ user_data'가'NULL'이면 메서드 나 속성을 호출하면 설명 된 오류 메시지가 나타납니다. –

1

나는 검사의 경우 엄청난 부채입니다. 아이디어는 당신이 당신이 기대하는 것을 얻지 못하면, 당신은 즉시 빠져 나간다는 것입니다. 이것은 결과를 되 돌리거나 진실한 허위 검사를 할 수 있습니다. 물론 CI 폼 유효성 검사를 사용하여 사용자 이름의 유효성을 검증 할 것입니다. 예를 들어 모델에서 사용자 이름을 검사하는 메소드 - 결과가 0 인 경우 false를 리턴합니다. 그런 다음 귀하의 컨트롤러에서 :

모든 메소드 이름 앞에 밑줄을 넣습니다. CI는 자동으로 해당 개인을 만듭니다. 메소드 이름에 대한 Camel 케이스와 밑줄에주의하십시오. 어떤 사람들은 그것을 선호합니다.

1

이 작업을 수행 할 수 있습니다 : 당신의 초기 코드에 거의 동일하지만, else

if (count($user_data) == 0) { 
    $output = array('content' => 'The user was not found in the database!', 'title' => 
       'User Not Found'); 
} else if ($this->is_user_locked($user_data->lock_date)) { 
    $output = array('content' => 'This user account is currently locked!', 'title' => 
       'Account Locked'); 
} 

가 던져

관련 문제