2014-01-06 3 views
1

나는 Callback 함수를 가지고 있는데, 두 번째 매개 변수는 Array입니다.일부 변수의 부울 값에 따라 반환되는 값

public function foo ($something, $callback) { 
    /** 
    * function body 
    */ 
    $booleanOrArray = $this->bar(); 

    if (is_callable ($callback)) { 
    return call_user_func ($callback, !is_array($booleanOrArray), $booleanOrArray || [ ]); 
    } 
    throw new Exception('A callback function must be defined.'); 
} 

는 그래서, call_user_func에, $booleanOrArray라고 var에있다 : 그래서, 내가 좋아하는 뭔가가있다. 이것은 함수 bar의 procces가 잘 수행되면 데이터가있는 Array을 반환하고 그렇지 않으면 bar 함수가 false을 반환하기 때문입니다. 그래서 bar 복귀 false 경우 callback 함수의 첫 번째 파라미터는 푸 false를 반환 경우, Array 경우,이 PARAM false가 될 것이며,이 오류이며, is_array($booleanOrArray) 의해 결정되므로된다.

는하지만, 내 응용 프로그램에서, 나는 다음과 같이 callback 함수를 정의하는 사용자에게 강제 :

$MyClass = new ClassInstance(); 
$MyClass->foo('firstParam', function ($error, Array $data) { 
    if (! $error) { 
    var_dump($data); 
    } 
    else { 
    print 'Hey!'; 
    } 
}); 

는하지만,이 모든 코드 뒤에, 나는 $booleanOrArray || [ ] 항상 false을 반환 실현 놀랐다. 자바 스크립트에서

, foonull, 또는 false, 또는 undefined 경우 I 코드 var x = foo || bar;는 다음 x는 그 반대의 경우도 마찬가지 bar 값을 가지고 있고됩니다.

그래서, 질문 :

  • 이 PHP에서 가능, 또는 나는 $x = ($booleanOrArray) ? $booleanOrArray : [ ] 같은 것을 할 필요가?

  • 이 경우 콜백 기능을 향상시킬 생각이 있습니까? (하지의 의견을 기반으로 만 기준) $x = ($booleanOrArray) ? $booleanOrArray : [ ] 같은

+1

제안 : 수동으로 강제 실행하고 예외를 던지는 대신 'callable' 유형 힌트를 사용할 수 있습니다. –

+0

제 실제 응용 프로그램에서는 func_get_args() 함수 damsamycally를 사용하고 있습니다 만, 좋은 데이터입니다. 감사합니다! –

+1

다음과 같이 쓸 수 있습니다 :'$ x = true or $ x = []; var_dump ($ x); 그리고'$ x = false 또는 $ x = []; var_dump ($ x);'하지만 @ dev-null-dweller가 제안한 짧은 삼항 연산자는 훨씬 더 좋아 보인다. – piotrekkr

답변

4

무엇인가?.

예, 당신도 단축 사용할 수 삼항 구문 : $booleanOrArray에서

$booleanOrArray ?: [] 

이 결과는 falsy이 아니거나 빈 배열, 그렇지 않은 경우.

관련 문제