PHP 프로그래밍에서 Array_Diff ()는 첫 번째 배열에 나타나지 만 다른 배열에는 그렇지 않은 배열 및 반환 값의 차이를 비교하는 매우 실용적인 기능입니다. 그러나 특히 디버깅 또는 성능 분석 시나리오에서 내부 실행 프로세스를 깊이 이해하는 것이 특히 중요합니다.
이 기사를 사용하면 xdebug를 사용하여 Array_Diff () 함수의 실행 프로세스를 단계별로 추적하여 실행중인 메커니즘을보다 명확하게 이해할 수 있도록 도와줍니다.
디버깅을 시작하기 전에 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
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
)
IDE (vs code, phpstorm과 같은)가 청취 포트를 활성화하고 array_diff () 줄에서 중단 점을 설정했는지 확인하십시오.
예를 들어 서버를 시작 하고이 PHP 페이지에 액세스하십시오.
http://localhost/array_diff_debug.php
IDE는 자동으로 중단 점을 캡처하고 코드 실행을 일시 중지합니다.
IDE의 디버그 패널에서 다음 정보를 볼 수 있습니다.
통화 스택 : 기능의 호출 경로를 볼 수 있습니다.
로컬 변수 : $ array1 , $ array2 및 $ result 의 값을 볼 수 있습니다.
글로벌 : 사용 가능한 모든 글로벌 변수의 상태를 볼 수 있습니다.
라인 바이 라인 디버깅 (단계 끝 / 단계로)을 통해 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 초에 호출되어 배열을 반환했음을 나타냅니다.
xdebug를 통해 array_diff () 의 기본 C 구현을 입력 할 수는 없지만 PHP 소스 코드 에서 Array.c 파일의 관련 구현을 참조 할 수 있습니다.
간단히, array_diff () 의 내부 논리는 다음과 같습니다.
첫 번째 배열의 각 요소를 반복하십시오.
각 요소에 대해 후속 배열에서 조회가 수행됩니다.
요소가 후속 배열에 나타나지 않으면 결과 배열에 추가됩니다.
"비 스트릭 비교", 즉, 요소 값이 같은지 여부를 결정하기 위해 ==를 사용합니다.
디버깅을 통해 혼합 숫자와 문자열 배열을 추가하고 결과를 반환하는 것과 같은이 논리를 확인할 수 있습니다.
xdebug를 사용하여 array_diff () 를 디버그하는 것은 동작을 이해하는 훌륭한 방법입니다. 내부 소스 코드를 직접 입력 할 수는 없지만 기능 추적, 가변 관찰, 성능 분석 및 기타 기능을 통해 여전히 풍부한 실행 정보를 얻을 수 있습니다.
이 디버깅 기술은 Array_Diff () 에 적합 할뿐만 아니라 다른 복잡한 기능 또는 비즈니스 로직의 분석에 일반화되어 코드 작동 메커니즘에 대한 제어를 향상시킬 수 있습니다.