?: 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
로로 합니다.foo
foo
또는 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진 연산자의 중간 부분을 생략할 수 있습니다.식이 반환됨
expr1
expr1
TRUE
, , , , 입니다.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
'programing' 카테고리의 다른 글
wait는 비동기 기능에서만 유효합니다. (0) | 2022.10.22 |
---|---|
MySQL/MariaDB FOUND_ROWS에서 행이 반환되지 않았더라도 1이 반환됨 (0) | 2022.10.22 |
MySQL 테이블에서 제약을 제거하는 방법 (0) | 2022.10.12 |
데이터베이스 복원 시 이모티콘이 유지되지 않음 (0) | 2022.10.12 |
mariaDB, 여러 테이블에서 삭제가 정말 안전합니까? (0) | 2022.10.12 |