PHP에서 이중 물음표(?) 연산자는 무엇을 의미합니까?
Symfony 프레임워크(버전 4) 코드를 조사하던 중 다음 코드를 발견했습니다.
$env = $_SERVER['APP_ENV'] ?? 'dev';
이것이 실제로 어떤 역할을 하는지는 모르겠지만 다음과 같은 형태로 확장될 것으로 예상됩니다.
$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';
또는 다음과 같은 경우가 있습니다.
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
누가 그 주제에 대해 정확성을 가지고 있나요?
php 7.0에 추가된 "null 병합 연산자"입니다.동작의 정의는 다음과 같습니다.
NULL이 아닌 경우 첫 번째 피연산자를 반환하고, 그렇지 않은 경우 두 번째 피연산자를 반환합니다.
즉, 실제로는 편리한 오퍼레이터에 있습니다.
이 두 가지는 동일합니다1.
$foo = $bar ?? 'something';
$foo = isset($bar) ? $bar : 'something';
문서: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce
새로운 PHP7 기능 목록: http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
오리지널 RFC https://wiki.php.net/rfc/isset_ternary
편집: 이 답변에는 많은 뷰가 표시되므로 명확한 설명은 거의 없습니다.
1차이가 있습니다.의 경우??
첫 번째 표현은 1회만 평가됩니다.? :
첫 번째 조건 섹션에서 식을 평가하고 두 번째 "응답" 섹션에서 식을 평가합니다.
$myVar = $someVar ?? 42;
다음과 같습니다.
$myVar = isset($someVar) ? $someVar : 42;
상수의 경우 이미 존재하는 상수를 사용하는 경우 동작은 동일합니다.
define("FOO", "bar");
define("BAR", null);
$MyVar = FOO ?? "42";
$MyVar2 = BAR ?? "42";
echo $MyVar . PHP_EOL; // bar
echo $MyVar2 . PHP_EOL; // 42
단, 존재하지 않는 상수에 대해서는 다릅니다.
$MyVar3 = IDONTEXIST ?? "42"; // Raises a warning
echo $MyVar3 . PHP_EOL; // IDONTEXIST
경고:정의되지 않은 상수 IDONTEXIST 사용 - 'IDONTEXIST' 가정(이것으로 인해 향후 PHP 버전에서 오류가 발생함)
Php는 존재하지 않는 상수를 문자열로 변환합니다.
상수가 존재하지 않으면 상수 또는 null 값을 반환할 수 있지만 경고가 발생합니다.오류 제어 연산자를 사용하여 함수 앞에 추가할 수 있습니다. @
경고 메시지를 무시하려면:
$myVar = @constant("IDONTEXIST") ?? "42"; // No warning displayed anymore
echo $myVar . PHP_EOL; // 42
$x = $y ?? 'dev'
y가 설정되어 있는 경우 x = y에 대한 짧은 표현이고, 그렇지 않은 경우 x = 'dev'에 대한 짧은 표현입니다.
또 있다
$x = $y =="SOMETHING" ? 10 : 20
즉, y가 'SOMTING'이면 x = 10이고, 그렇지 않으면 x = 20입니다.
언급URL : https://stackoverflow.com/questions/53610622/what-does-double-question-mark-operator-mean-in-php
'programing' 카테고리의 다른 글
Access-Control-Allow-Origin 헤더는 어떻게 동작합니까? (0) | 2022.09.16 |
---|---|
PHP는 오류 로그를 어디에 저장합니까? (PHP 5, Apache, Fast CGI 및 cPanel) (0) | 2022.09.15 |
vuex 스토어가 빌드에 포함되도록 하려면 어떻게 해야 합니까? (0) | 2022.09.15 |
PHP cURL은 단일 요청으로 응답 헤더와 본문을 검색할 수 있습니까? (0) | 2022.09.15 |
preg_replace를 사용하여 영숫자가 아닌 모든 문자 제거 (0) | 2022.09.15 |