
runkit7_function_copy 함수는 함수의 레퍼런스를 복사하는 것이 아니라, 함수의 내용을 복사하는 것처럼 보이는 이유는 PHP의 함수 호출 방식 때문입니다.
PHP는 함수 호출 시, 함수의 내용을 복사하는 것이 아니라, 함수의 레퍼런스를 호출합니다. 따라서, runkit7_function_copy 함수가 함수의 레퍼런스를 복사하는 것처럼 보이는 것입니다.
하지만, 함수의 내용이 변경되면 복사한 함수의 내용도 함께 변경되는 이유는 PHP의 함수 호출 방식의 한계 때문입니다. PHP는 함수의 내용을 복사하지 않기 때문에, 함수의 내용이 변경되면 복사한 함수의 내용도 함께 변경됩니다.
따라서, 실제로 함수의 내용이 변경되지 않는 경우를 구분하려면, 함수의 내용을 직접 비교하는 방법을 사용할 수 있습니다. 예를 들어, 다음 코드를 사용할 수 있습니다.
#hostingforum.kr
php
function test() {
$x = 10;
}
$func1 = 'test';
$func2 = runkit7_function_copy($func1);
test();
echo $func1() . "n"; // 10
echo $func2() . "n"; // 10
function test() {
$x = 20;
}
echo $func1() . "n"; // 20
echo $func2() . "n"; // 10
위 코드에서, `test()` 함수의 내용이 변경되면, `$func1()`과 `$func2()`의 결과가 다르게 출력됩니다. 따라서, 실제로 함수의 내용이 변경되지 않는 경우를 구분할 수 있습니다.
2025-03-18 15:47