티스토리 뷰

반응형

PHP를 활용하다 보면 JSON 데이터를 디코딩하거나 변수의 배열 크기를 확인해야 하는 경우가 자주 발생합니다. 하지만 이 과정에서 종종 count() 함수와 관련된 경고 메시지로 인해 당혹스러운 경험을 하곤 합니다. 특히, count() 함수는 배열이 아닌 값에 사용될 경우 경고를 발생시키기 때문에 코드를 보다 안전하게 작성하려면 이를 미리 방지하는 방법이 필요합니다.

오늘은 PHP 7.3 이상에서 제공되는 is_countable() 함수를 활용하여, 이러한 경고를 사전에 차단하고 배열 크기를 안전하게 확인하는 방법에 대해 알아보겠습니다. 초보자도 이해할 수 있도록 천천히 설명해 보겠습니다.


문제 상황: count() 함수 사용 시 경고 메시지

count() 함수는 배열의 크기나 객체의 요소 수를 반환하는 매우 유용한 함수입니다. 하지만 배열이 아닌 값에 이 함수를 사용하면 PHP는 경고 메시지를 출력합니다. 예를 들어, 다음 코드를 살펴보겠습니다.

$data = null;
echo count($data);

위 코드는 count() 함수가 null 값에 대해 호출되었기 때문에 다음과 같은 경고 메시지를 출력합니다.

Warning: count(): Parameter must be an array or an object that implements Countable

이러한 경고는 코드가 작동은 하더라도 화면에 불필요한 메시지를 출력하여 사용자 경험을 해칠 수 있습니다. 따라서 우리는 이 문제를 방지하기 위해 추가적인 검증을 도입해야 합니다.


PHP 7.3 이상에서 제공되는 is_countable() 함수

PHP 7.3부터는 is_countable() 함수가 도입되었습니다. 이 함수는 특정 값이 count() 함수를 사용할 수 있는지 여부를 확인할 수 있습니다. 즉, 배열이나 Countable 인터페이스를 구현한 객체인지 검사할 수 있다는 뜻입니다.

이를 활용하면 count() 함수 사용 시 발생할 수 있는 경고를 완전히 방지할 수 있습니다. 예제를 통해 살펴보겠습니다.


JSON 데이터를 처리하면서 안전하게 배열 크기를 확인하기

실제 개발 상황을 가정해 봅시다. 예를 들어, 두 개의 JSON 데이터를 배열로 디코딩하고, 각각의 크기를 더한 값을 구해야 하는 코드가 있다고 가정합니다. 다음은 수정 전의 코드입니다.

$eList = json_decode($eList_screen, true);
$eslatList = json_decode($eList_slat, true);

$surang = count($eList) + count($eslatList);

만약 json_decode()의 결과가 null이라면 count() 함수에서 경고 메시지가 발생합니다. 이를 방지하기 위해 is_countable()을 사용한 안전한 코드는 다음과 같습니다.

$eList = json_decode($eList_screen, true);
$eslatList = json_decode($eList_slat, true);

$eListCount = is_countable($eList) ? count($eList) : 0;
$eslatListCount = is_countable($eslatList) ? count($eslatList) : 0;

$surang = $eListCount + $eslatListCount;

코드 설명

  1. is_countable() 함수로 배열 여부 확인
    먼저, is_countable()을 사용해 배열 또는 Countable 인터페이스를 구현한 객체인지 확인합니다. 이 검사를 통과하지 못하면 count()를 호출하지 않고 기본값 0을 반환합니다.
  2. null이나 다른 비-배열 값에 대한 안전한 처리
    만약 json_decode()의 결과가 null이라면 is_countable()에서 false를 반환합니다. 이 경우, $eListCount나 $eslatListCount에 0이 할당되므로 경고 없이 크기를 안전하게 처리할 수 있습니다.
  3. 가독성 높은 코드 작성
    is_countable()을 사용함으로써 경고 메시지 없이 배열 크기를 확인할 수 있고, 가독성 높은 코드를 유지할 수 있습니다. 이는 특히 대규모 프로젝트나 팀 단위로 작업할 때 매우 중요한 요소입니다.

실제 적용 예제

아래는 위의 방법을 활용한 실제 코드입니다. JSON 데이터를 디코딩한 뒤, 두 데이터의 크기를 합산하는 작업을 수행합니다.

// JSON 문자열을 PHP 배열로 디코딩합니다.
$eList = json_decode($eList_screen, true);
$eslatList = json_decode($eList_slat, true);

// countable 여부를 확인한 후 count() 함수를 사용합니다.
$eListCount = is_countable($eList) ? count($eList) : 0;
$eslatListCount = is_countable($eslatList) ? count($eslatList) : 0;

// 배열의 크기를 합산합니다.
$surang = $eListCount + $eslatListCount;

echo "총 합계: " . $surang;

위 코드는 JSON 데이터를 안전하게 처리하며, 모든 상황에서 오류 없이 작동합니다.


추가 팁: PHP 버전 호환성을 고려하자

is_countable() 함수는 PHP 7.3부터 사용할 수 있습니다. 만약 이전 버전을 사용 중이라면 대신 is_array()를 사용하거나, 아래와 같은 사용자 정의 함수를 만들어 사용할 수 있습니다.

function safe_count($value) {
    return (is_array($value) || $value instanceof Countable) ? count($value) : 0;
}

// 사용 예
$eListCount = safe_count($eList);
$eslatListCount = safe_count($eslatList);

이 방법을 사용하면 PHP 7.3 이전 버전에서도 동일한 기능을 구현할 수 있습니다.


PHP를 다루다 보면 다양한 데이터 타입을 처리하게 됩니다. 특히 배열 크기를 확인하거나 데이터를 디코딩할 때는 항상 경고 메시지가 발생하지 않도록 주의해야 합니다. 위의 방법을 활용하면 보다 안전하고 깔끔한 코드를 작성할 수 있을 것입니다. 이러한 작은 차이가 모여 코드의 안정성과 품질을 크게 향상시킵니다.

 

 

반응형
댓글