현재 위치: > 최신 기사 목록> xdebug를 사용하여 array_diff ()의 내부 실행 프로세스를 추적합니다.

xdebug를 사용하여 array_diff ()의 내부 실행 프로세스를 추적합니다.

M66 2025-06-06

PHP 프로그래밍에서 Array_Diff ()는 첫 번째 배열에 나타나지 만 다른 배열에는 그렇지 않은 배열 및 반환 값의 차이를 비교하는 매우 실용적인 기능입니다. 그러나 특히 디버깅 또는 성능 분석 시나리오에서 내부 실행 프로세스를 깊이 이해하는 것이 특히 중요합니다.

이 기사를 사용하면 xdebug를 사용하여 Array_Diff () 함수의 실행 프로세스를 단계별로 추적하여 실행중인 메커니즘을보다 명확하게 이해할 수 있도록 도와줍니다.

1. 준비 : XDEBUG 설치 및 구성

디버깅을 시작하기 전에 XDEBUG가 개발 환경에 설치되어 있는지 확인하십시오. 일반적인 PHP 통합 환경 (예 : XAMPP, Laragon 또는 MAMP)을 사용하는 경우 XdeBug가 이미 설치되어있을 가능성이 높습니다.

명령 줄을 통해 설치되어 있는지 확인할 수 있습니다.

 php -v

XdeBug가있는 단어가 출력에 나타나면 Xdebug가 준비되었음을 의미합니다. 그렇지 않으면 PHP 버전 및 시스템 플랫폼에 따라 해당 XDEBUG 버전을 다운로드하여 설치하려면 다음 링크에 액세스 할 수 있습니다.

 https://xdebug.org/wizard

구성 후 php.ini 에 다음 내용을 추가하십시오 (아직 구성되지 않은 경우) :

 zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003

2. 샘플 코드 : Array_Diff () 사용

Array_Diff () 의 동작을 테스트하기 위해 간단한 PHP 스크립트를 만듭니다.

 <?php
$array1 = ["apple", "banana", "cherry"];
$array2 = ["banana", "kiwi"];

$result = array_diff($array1, $array2);

echo "<pre>";
print_r($result);
echo "</pre>";

// 페이지 점프를 시뮬레이션하십시오,데모를 위해 URL 디버그 경로
header("Location: https://m66.net/debug-result");
exit;

이 코드의 목적은 $ array1 에 고유 한 요소를 찾는 것이며 예상 출력은 다음과 같습니다.

 Array
(
    [0] => apple
    [2] => cherry
)

3. XDEBUG를 사용하여 실행 프로세스를 추적하십시오

1. 디버깅 세션을 시작하십시오

IDE (vs code, phpstorm과 같은)가 청취 포트를 활성화하고 array_diff () 줄에서 중단 점을 설정했는지 확인하십시오.

예를 들어 서버를 시작 하고이 PHP 페이지에 액세스하십시오.

 http://localhost/array_diff_debug.php

IDE는 자동으로 중단 점을 캡처하고 코드 실행을 일시 중지합니다.

2. 스택 정보를 봅니다

IDE의 디버그 패널에서 다음 정보를 볼 수 있습니다.

  • 통화 스택 : 기능의 호출 경로를 볼 수 있습니다.

  • 로컬 변수 : $ array1 , $ array2$ result 의 값을 볼 수 있습니다.

  • 글로벌 : 사용 가능한 모든 글로벌 변수의 상태를 볼 수 있습니다.

3. 분석을 단계별로 수행하십시오

라인 바이 라인 디버깅 (단계 끝 / 단계로)을 통해 Array_Diff () 의 실제 호출 타이밍과 리턴 값을 관찰 할 수 있습니다. Array_Diff () 는 내부 구현을 라인별로 입력 할 수없는 내장 기능이지만 입력 및 출력 프로세스를 명확하게 볼 수 있습니다.

또한 Xdebug는 기능 호출 추적을 지원합니다. 구성 파일에서 다음 설정을 활성화 할 수 있습니다.

 xdebug.mode=trace
xdebug.start_with_request=yes
xdebug.output_dir="/var/www/html/xdebug_trace"

그런 다음 스크립트를 실행하면 지정된 디렉토리에 생성 된 .xt 파일이 다음과 유사한 내용으로 표시됩니다.

 0.1234  -> array_diff(array, array)
0.1235  <- array_diff() = array(...)

이것은 Array_Diff ()가 0.1234 초에 호출되어 배열을 반환했음을 나타냅니다.

4. Array_diff ()의 메커니즘을 깊이 이해합니다.

xdebug를 통해 array_diff () 의 기본 C 구현을 입력 할 수는 없지만 PHP 소스 코드 에서 Array.c 파일의 관련 구현을 참조 할 수 있습니다.

간단히, array_diff () 의 내부 논리는 다음과 같습니다.

  1. 첫 번째 배열의 각 요소를 반복하십시오.

  2. 각 요소에 대해 후속 배열에서 조회가 수행됩니다.

  3. 요소가 후속 배열에 나타나지 않으면 결과 배열에 추가됩니다.

  4. "비 스트릭 비교", 즉, 요소 ​​값이 같은지 여부를 결정하기 위해 ==를 사용합니다.

디버깅을 통해 혼합 숫자와 문자열 배열을 추가하고 결과를 반환하는 것과 같은이 논리를 확인할 수 있습니다.

5. 요약

xdebug를 사용하여 array_diff () 를 디버그하는 것은 동작을 이해하는 훌륭한 방법입니다. 내부 소스 코드를 직접 입력 할 수는 없지만 기능 추적, 가변 관찰, 성능 분석 및 기타 기능을 통해 여전히 풍부한 실행 정보를 얻을 수 있습니다.

이 디버깅 기술은 Array_Diff () 에 적합 할뿐만 아니라 다른 복잡한 기능 또는 비즈니스 로직의 분석에 일반화되어 코드 작동 메커니즘에 대한 제어를 향상시킬 수 있습니다.