질문을 삭제하지 말아주세요.!
 
1
0
-1

안녕하세요. 문득 3항 연산자를 검색해보다가...

http://php.net/manual/kr/language.operators.comparison.php#language.operators.comparison.ternary


Note: 
삼항 연산자는 구문이므로, 변수로 평가되지 않고 구문의 결과로 평가되는 점에 주의하십시오.
이 점은 참조로 변수를 반환할 때 중요합니다. 
그러므로 참조로 반환하는 함수에서 return $var == 42 ? $a : $b; 구문은 작동하지 않고, 
경고가 발생합니다.



이런 문구를 발견했는데요. 정확히 어떤 상황인지 이해가 잘 되지 않습니다.

경고를 보려면 어떤 코드를 짜야하는지, 어떤 경고가 나오는 지 궁금합니다.


<?php

function test($var){
    $a = 'aaa';
    $b = 'bbb';
    return $var == 42 ? $a : $b;
}
print_r(test(42));

이런 코드는 물론 잘 돌아갑니다. 어떻게 바꿔야 경고를 볼 수 있을까요?

    CommentAdd your comment...

    3 answers

    1.  
      2
      1
      0

      http://php.net/manual/kr/language.references.return.php

      자답합니다 ㅠㅠ

      동료분이 찾아주신 이걸로 이해가 되었습니다.

        CommentAdd your comment...
      1.  
        1
        0
        -1

         어쩌다보니 이런 글을 발견했어요. 이미 자답을 하셨지만 혹시나 추가로 도움이 되실까하여 남겨봅니다.

        http://blogchannel.tistory.com/95

          CommentAdd your comment...
        1.  
          1
          0
          -1
          <?php
          
          function test($var){
              $a = 'aaa';
              $b = 'bbb';
              return $var == 42 ? $a : $b;
          }
          $a = &test(42);


          경고의 내용은,

          <br />
          <b>Strict Standards</b>: Only variables should be assigned by reference in <b>[...][...]</b> on line <b>8</b><br />


          결국 변수만 참조를 전달할 수 있다 → 삼항연산자는 표현식이다까지는 이해가 되었고...

          삼항 연산자는 구문이므로, 변수로 평가되지 않고 구문의 결과로 평가되는 점...이라는 말은, 

          삼항 연산자 구문의 결과는 $a라는 변수가 아닌, $a라는 변수를 평가한 값이다. 정도로 이해하면 되겠죠?

          1. 갸르릉

            네 그렇게 이해하셔도 될 것 같습니다.

            삼항연산 그 자체는 특정한 값을 반환하지만, 변수로서 취급되지 않는다가 골자 인것 같습니다.

            말씀 하신것처럼 하나의 구문이고 표현식입니다.

            그리고 그것을 증명하는 내용중 하나가 질문하신 내용입니다.

            Note: 
            삼항 연산자는 구문이므로, 변수로 평가되지 않고 구문의 결과로 평가되는 점에 주의하십시오.
            이 점은 참조로 변수를 반환할 때 중요합니다. 
            그러므로 참조로 반환하는 함수에서 return $var == 42 ? $a : $b; 구문은 작동하지 않고, 
            경고가 발생합니다.


          2. Joo YoungIk

            네, 고맙습니다. 함수 리턴값에 참조를 걸어 써 본 적이 없어 혼란이 왔었습니다.

          CommentAdd your comment...