PHP를 위한 병합 함수?

많은 프로그래밍 언어에는 병합 함수가 있습니다(: NULL이 아닌 첫 번째 값을 반환합니다).2009년 PHP는 슬프게도 그렇지 않다.

PHP 자체에서 통합 함수를 얻을 때까지 PHP에서 이를 구현하는 좋은 방법은 무엇일까요?



질문에 대한 답변



php 5.3에는 다음과 같은 작업을 수행하는 새로운 연산자가 있습니다.?:

// A echo 'A' ?: 'B';
// B echo '' ?: 'B';
// B echo false ?: 'B';
// B echo null ?: 'B'; 

출처 : http://www.php.net/ChangeLog-5.php#5.3.0




PHP 7은 실제 병합 연산자를 도입했습니다.

echo $_GET['doesNotExist'] ?? 'fallback'; // prints 'fallback' 

이전 값이??존재하지 않거나 존재함null다음 값??사용되었습니다.

상기의 개선점?:연산자란,??또한 정의되지 않은 변수를 처리하지 않고E_NOTICE.




구글에서 “php coalese”를 처음으로 히트시켰습니다.

function coalesce() {
$args = func_get_args();
foreach ($args as $arg) {
if (!empty($arg)) {
return $arg;
}
}
return NULL; } 

http://drupial.com/content/php-coalesce




나는 정말 ?: 연산자를 좋아한다.아쉽게도 아직 제 생산환경에서 구현되지 않았습니다.그래서 다음과 같은 것을 사용합니다.

function coalesce() {
return array_shift(array_filter(func_get_args())); } 



PHP의 미가산 변수와 배열 인덱스에 대한 처리로 인해 어떤 종류의 병합 함수라도 제한적으로 사용할 수 있다는 점에 유의할 필요가 있습니다.저는 이것을 할 수 있으면 좋겠습니다.

$id = coalesce($_GET['id'], $_SESSION['id'], null); 

그러나 대부분의 경우, 이로 인해 PHP가 E_NOTICE에서 오류를 일으킵니다.변수를 사용하기 전에 변수의 존재를 테스트하는 안전한 방법은 empty() 또는 isset()에서 직접 사용하는 것입니다.병합의 모든 옵션이 초기화된 것으로 알려진 경우 Kevin이 제안한 3원 연산자가 최상의 옵션입니다.