2012-06-16 4 views
0

가능한 중복 :
Coalesce function for PHP?PHP에서 쓰러져가는 변수 할당?

나는 이것이 일반적으로 소위 잘 모르겠지만, 나는 제목이 충분히 잘 전달되기를 바랍니다. 내가 가지고있는 변수 중 일부는 null 일 수 있습니다.

내가하고 싶은 :

$ a가 최초의 null 이외의 변수 = 것으로 끝
$a = $b || $c || $d; 

.

+0

b OR c OR d의 내용을 a : \에 지정하려고합니까? – theBigChalk

+2

이 언어가 잘못되었습니다. 루비 또는 자바 스크립트에서 작동합니다. PHP에서, AFAIK, 당신은 trinary 연산자로 가서'$ b! == null? $ b : ($ c! == null? $ c : $ d)' – Amadan

+0

또한보십시오 : http://stackoverflow.com/questions/1013493/coalesce-function-for-php – Wrikken

답변

4

제 생각에 PHP는 JavaScript와 같은 방식으로이 기능을 지원하지 않습니다.

당신은, 그러나 같은 것을 할 수 있습니다

$a = $b ? $b : ($c ? $c : $d); 

보다 일반적인 솔루션 :

function fallthrough($arr) { 
    //$arr should be an array of possible values. The first non-null value is returned 
    do $a = array_shift($arr); 
    while($a === null && $arr); 
    return $a; 
} 
+0

그래서, 가장 좋은 방법은 무엇입니까? PHP에서이 작업을 수행 하시겠습니까? 분명히 더 많은 변수를 가지고 정신 나간 것처럼 삼항 연산자를 중첩시킬 수는 없습니다. else if 블록이 큰지? – Joren

+0

조심성 -'$ b'가''0 ''이면, 그것은 넘어 질 것이다. 더 정확하게 말하자면, 그것은 위증스러운 가치에 빠질 것입니다. 넘어지기 위해 정말로'null '만 필요하다면 명시 적으로 테스트해야합니다. – Amadan

+0

당신이 할 수있는 일은 함수를 정의하는 것입니다. 해결책으로 내 대답을 편집하겠습니다. –

3
<?php 
$a = 0; 
$b = false; 
$c = true; //should become this 
$d = '1'; 
$e = $a ?: $b ?: $c ?: $d; 
var_dump($e); 
//bool(true) 

//should be '1' if order is different 
$e = $a ?: $b ?: $d ?: $c; 
var_dump($e); 
//string(1) "1" 

... 그러나 ?: 좀 새로운, 당신은 혼란 뜻을 동료/동료 코더.

+0

오, 명시된 바와 같이 : NULL뿐 아니라 모든 위조 된 값에 오류가 발생합니다. – Wrikken

0

나는 그렇게 생각하지 않습니다. 나는 당신이 다른, 좀 힘드는 방법을 사용해야 할 것 같아요. 나는. 과 같이, 변수의 배열을 만들이 아닌 null 값을 찾을 때까지 반복 루프를 중단 : 여기에 몇 가지 다른 답변 말처럼

$vars = array("b" => $b, "c" => $c, "d" => $d); 

foreach($vars as $var) { 
    if($var != null) { 
     $a = $var; 
     break; 
    } 
} 

글쎄, 당신은 쓰기의 속기 방법을 사용할 수 있습니다 하지만 읽을 수있는 코드를 작성하는 것도 중요합니다. 위의 코드는 꽤 읽기 쉽습니다.