programing

?: PHP의 연산자('Elvis 연산자')

yoursource 2022. 10. 12. 21:48
반응형

?: PHP의 연산자('Elvis 연산자')

나는 오늘 이것을 PHP 코드에서 보았다.

$items = $items ?: $this->_handle->result('next', $this->_result, $this);

잘잘 the the는 잘 .?:츠미야삼원 연산자처럼 보이지만 술어가 참인지 여부를 평가하는 식이 생략되었습니다.것은은 무엇 ?? ????

왼쪽 피연산자가 truthy이면 왼쪽 피연산자가 평가되고, 그렇지 않으면 오른쪽 피연산자가 평가됩니다.

의사 코드에서는

foo = bar ?: baz;

대충 해결하다

foo = bar ? bar : baz;

또는

if (bar) {
    foo = bar;
} else {
    foo = baz;
}

에 따라bar한 번만 평가됩니다.

'을 할 때도 사용할 수 있습니다.foo당신이 투고한 코드의 예에 나타나 있듯이:

foo = foo ?: bar;

이렇게 하면 할당됩니다.bar로로 합니다.foofoo 또는 null로 남습니다.그렇지 않을 경우, 그것은 남습니다.foo변경되지 않았습니다.

기타 예:

<?php
    var_dump(5 ?: 0); // 5
    var_dump(false ?: 0); // 0
    var_dump(null ?: 'foo'); // 'foo'
    var_dump(true ?: 123); // true
    var_dump('rock' ?: 'roll'); // 'rock'
?>

그나저나 엘비스 오퍼레이터라고 해요

엘비스 오퍼레이터

다음의 문서를 참조해 주세요.

PHP 5.3부터는 3진 연산자의 중간 부분을 생략할 수 있습니다.식이 반환됨expr1expr1TRUE , , , , 입니다.expr3렇지지그

이치노 합니다.?★★★★

  $params = ['param1' => 'value1',
             'param2' => 'value2',
             'param3' => 'value3',];

  $param1 = isset($params['param1'])?:null;
  $param2 = !empty($params['param2'])?:null;
  $param3 = $params['param3']?:null; // get E_NOTICE, if $params['param3'] eq false

  var_dump($param1,$param2,$param3);
  true // would like to expect `value1`
  true // would like to expect `value2`
  param3 // properly, but problem above

갱신필

RFC에서.PHP 7에서는 연산자 Null Curalesce Operator가 이를 수행합니다. 예를 들어 다음과 같습니다.

$param1 = $params['param1'] ?? null;
// Equivalent to:  $param1 = isset($params['param1']) ? $params['param1'] : null;

엘비스 오퍼레이터:

?:엘비스 오퍼레이터입니다이것은 다음 작업을 수행하는 이진 연산자입니다.

합니다.?:합니다.true.true왼쪽 식을 반환하고, 거짓일 경우 오른쪽 식을 반환합니다.

예:

var_dump(0 ?: "Expression not true");     // expression returns: Expression not true
var_dump("" ?: "Expression not true");    // expression returns: Expression not true
var_dump("hi" ?: "Expression not true");  // expression returns string hi
var_dump(null ?: "Expression not true");  // expression returns: Expression not true
var_dump(56 ?: "Expression not true");    // expression return int 56

사용 시기:

Elvis 연산자는 기본적으로 3진 연산자의 특정 경우에 대한 줄임말 구문입니다.

$testedVar ? $testedVar : $otherVar;

Elvis 오퍼레이터는 다음과 같은 방법으로 구문을 보다 균형 있게 만듭니다.

$testedVar ?: $otherVar;

또 다른 중요한 고려사항은 다음과 같습니다.Elvis Operator가 Zend Opcache 토큰화 프로세스를 중단합니다.난 이걸 힘들게 찾았어!이 문제는 이후 버전에서 수정되었지만 PHP 5.5.38(Zend Opcache v7.0.6-dev가 내장된 경우)에 존재하는 것을 확인할 수 있습니다.

일부 파일이 Zend Opcache에 캐시되는 것을 '거부'한 경우, 이것이 원인 중 하나일 수 있습니다.이게 도움이 됐으면 좋겠네요!

네, 이것은 PHP 5.3의 새로운 기능입니다.TRUE로 평가되면 테스트 식 값을 반환하고 FALSE로 평가되면 대체 값을 반환합니다.

언급URL : https://stackoverflow.com/questions/1993409/operator-the-elvis-operator-in-php

반응형