2009-10-09 6 views
6

call_user_func_array 함수를 호출하고 싶지만 인수가 함수 정의에서 참조이고 call_user_func_array에서 간단한 값인 경우 다음 경고가 나타납니다. 경고 : test()에 대한 매개 변수 1은PHP 변수가 참조인지 확인하는 방법?

<?php 
$a = 0; 
$args = array($a); 
function test(&$a) { 
    $a++; 
} 
$a = 0; 
call_user_func_array('test', $args); 
?> 

내 질문은 : 참조는, 값은 다음

은 내가 뭘하려고 오전의 간단한 예입니다 주어진 내가 아는 방법 경우 (이 경우 인수 $의 첫 번째 값) 값 참조 또는 아닙니다? 이 PHP 문서 페이지에 코멘트 밖으로

답변

2
+1

내가 보는 모든 두 배열/객체/변수를 수정하고 경우 확인하여 같은 메모리 영역을 가리키는 경우 기능을 확인하는 것입니다 다른 하나도 수정됩니다. 내 코드 (예제가 아닌 실제 코드)에는 인수 배열 만 있고 하나의 인수가 참조인지 알고 싶습니다. 그런 식으로, 콜백 함수가 참조를 원하고 배열에 간단한 값이 들어 있으면 오류가 발생할 수 있습니다. –

+0

이미 개발자를위한 경고가 트리거됩니다. 어떤 종류의 오류가 있습니까? 동작을 변경하려면 [맞춤 오류 처리기 설정] (http://php.net/set_error_handler)을 사용하십시오. – cmbuckley

4

아니, 문제는 함수의 첫 번째 매개 변수가 있다는 점이다 패스에 의해 참조 (의 인수를 수정할 수있는 기능을 의미 호출자의 범위). 따라서 첫 번째 인수로 지정할 수있는 변수 나 다른 것을 전달해야합니다. array($a)과 같은 배열을 만들면 배열의 슬롯에 변수 $a (0)의 값만 복사됩니다. 어떤 식 으로든 변수 $a을 참조하지 않습니다. 당신이 함수를 호출 할 때 그리고, 당신은이 일을하고있는이 작동하지 않는 경우로는 다음과 같습니다

test(0) 

당신이 정말로, 당신은 참조로 배열에 $a를 둘 수 있었다 싶었다면,하지만 좀 까다로운 :

<?php 
$a = 0; 
$args = array(&$a); 
function test(&$a) { 
    $a++; 
} 
call_user_func_array('test', $args); 
?> 

어떻게 말해 줄 수 있겠습니까? 배열 요소는 참조입니다 ... 어렵습니다. 당신은 배열에 var_dump()를 수행하고 "&"기호를 검색 할 수 있습니다 :

> var_dump($args); 
array(1) { 
    [0]=> 
    &int(1) 
} 
+0

예, 코드가 그런 식으로 작동한다는 것을 알고 있습니다. 나는 단지 call_user_func_array를 호출 할 때 오류를 피하기 위해 $ args 배열 (다른 것에 의해 전달되는 코드에서부터 아무 것도 포함 할 수 있음)을 만드는 방법을 원했다. 그래서 배열의 변수가 참조인지 아닌지 확인하는 방법을 알고 싶었습니다. –

관련 문제