2011-04-23 7 views
6

true 또는 false 중 하나를 반환하는 유효성 검사 함수가 있습니다.
그러나, 나는 그것이 인 경우 에 관한 정보를 제공하고 싶습니다.PHP - true | false를 반환하는 유효성 검사 함수 및 거짓이면 메시지

의 함수는 다음과 같이 말한다 보자

function is_valid($val) { 
    $result = array(true, array()); 
    if(rule_1_not_met) $result[1][] = 'Reason 1'; 
    if(rule_2_not_met) $result[1][] = 'Reason 2'; 
    if(count($result[1]) > 0) $result[0] = false; 
    return $result; 
} 

을 그리고 그것을 사용 : 나는 다음과 같이 변경 수 있다고 생각이

$val = $_GET['some_param']; 
if(!is_valid($val)) $out .= 'Not so helpful feedback.'; 
... 

처럼 사용

function is_valid($val) { 
    $result = true; 
    if(rule_1_not_met) $result = false; 
    if(rule_2_not_met) $result = false; 
    return $result; 
} 

이렇게 :

,210

내 질문

  • 이 예상치 못한 결과에 I 오전?
  • 더 좋은 방법이 있나요?

P. 당신이 올바른 궤도에 있지만 나는 당신이 데이터를 반환 캡슐화하는 결과 개체, 메시지 및 사용할 수

function is_valid($val,&$mes) { 
    $result = true; 
    if(rule_1_not_met) { $mes[]='message one'; $result = false; } 
    if(rule_2_not_met) { $mes[]='Message two'; $result = false; } 
    return $result; 
} 

$mes=array(); 
if(isvalid($val,$mes) ===false) $out .= implode('<br/>', $mes); 
+0

이 커뮤니티 위키를 만들 수있는 링크가 표시되지 않습니다. 어떻게 된거 야? –

+0

운영자의주의를 끌기 위해 플래그를 지정하고 간단한 메모를 작성할 수 있습니다. 하지만 이건 커뮤니티 위키 질문이 아닙니다. –

+0

@Felix Kling : 나는 하나 이상의 대답을 받아들이지 않을 수도 있기 때문에 그렇게 말했습니다. 무슨 일이 일어날 지 기다릴거야. –

답변

11

을 만들 것 지위. 코드에서 즉

class Result($bResult, $sMessage, $mData) { 
    public function __construct() { 
     $this->bResult = $bResult; 
     $this->sMessage = $sMessage; 
     $this->mData = $mData; 
    } 
} 

:

$result = new Result(true, 'some helpful message here', null); 
+0

이것은 'is_valid'를 여러 번 호출 할 때 점진적으로 메시지를 작성하는 이점이 있습니다. –

+0

감사합니다. 디버깅에 도움이됩니다. – CrandellWS

1
$reasons = array(); 
function is_valid($val) 
{ 
    global $reasons; 
    if (rule_1_not_met) $reasons[] = 'Reason 1'; 
    if (rule_2_not_met) $reasons[] = 'Reason 2'; 
    if (count($reasons) == 0) 
     return TRUE; 
    else 
     return FALSE; 
} 

if (!is_valid($condition)) 
{ 
    echo 'Was not valid for these reasons<br />'; 
    foreach($reasons as $reason) 
     echo $reason, '<br>'; 
} 
else 
    echo 'Is valid!'; 
2

이 방법으로이 작업을 수행하고자하는이 커뮤니티 위키를

+0

나는 당신이 여기서 제안하는 것을 좋아하지 만, 나는 야생에서 이것을 종종 보지 못한다. @ Framework의 제안은 내가 보았던 것이다. 나는 이것을 사용했던 기사 나 예제를 찾을 수조차 없었다 접근 ... 나는 단지 오늘 Googletard인가? 아니면 당신의 접근 방식을 사용하여 다른 사람들이 있습니까? –

+1

안녕하세요 @CamdenS. 이것은 상당히 맞춤형 솔루션입니다. 전이 구조를 사용하여 데이터를 옮길 전직 동료가 영감을 받았습니다. –

관련 문제