2013-07-10 2 views
2

만약 익명 함수를 사용하려고한다면, else 문을 사용합니다./다른 사람은 $ STR 변수에 함수를 저장하는 경우다른 함수와 익명 함수의 약자

$str = (true) ? function() { 
    //do something 
    return $result; 
} 
: 
function() { 
    //do something else 
    return $result; 
}; 
echo $str; 

이 속기 이후 Object of class Closure could not be converted to string 오류가 발생합니다.

함수를 실행 한 다음 $ str이 함수가 반환하는 값으로 설정되게하려면 어떻게해야합니까?

이 작업을 수행하는 데 훨씬 쉽고 간단한 방법이 있다는 것을 알고 있습니다. 그러나 나는 완고하고 단지 호기심을 만족시키고 싶습니다.

답변

3

의 경우 사람에

$str = true ? call_user_func(function(){ return "123"; }) : 
       call_user_func(function(){ return "321"; }); 
5

"짧은 손이라면/else"가 아니며, ternary operator입니다. 두 번째로, 실제로 함수를 호출하지 않고 변수 중 하나 또는 다른 변수에 $str을 할당하면됩니다. 결과 함수를 실제로 호출해야합니다. 이 작업을 수행 할 것 왜

, 나는 당신은하지 반환 값으로, 함수에 $str를 설정하는 아무 생각 ...

+1

"왜 당신은 이것을 할 것이고, 나는 전혀 모른다 ... "+1 – jondavidjohn

+0

나도 그렇다. 나는 그저 그런 느낌이 들었다. 매우 단순한 무언가를위한 것입니다. 문자열에 추가하는 if/elses가 많이 있습니다. 나는 하나의'$ str = ... '로 모두 쓸 수 있는지 알고 싶었다. –

+0

@VitaliyIsikov 그럼 그냥 써라. 이 기능은 오버 헤드 및 시각적 잡음을 추가합니다. – meagar

1

이 없습니다. 실제로 함수를 호출해야합니다.

echo $str(); 
1

터너 조작 변수 $str에 익명 함수, 함수의 실행이없는 결과를 할당 끝난다. 따라서 함수를 실행해야합니다.

<?php 
$str = (true) ? function() { return '123'; } : function() { return 'abc'; }; 
echo $str(); 
1

가 유용 PHP 7 이후 하나가 구문 가깝다을 사용하여 선언에 즉시 함수를 호출 할 수 있습니다 발견 call_user_func 당신은 사용할 수 있습니다

$result = (function() { return "Something"; })(); 

이에서를 당신이 할 수있는 경우 :

$str = (true) ? (function() { 
    //do something 
    return $result; 
})() 
: 
(function() { 
    //do something else 
    return $result; 
})(); 
관련 문제