2012-07-14 5 views
1

현재 나는 다음과 같은 코드 내 'function.php'내부호출 변수는

내가

이 내 주 '의 index.php'내부

function calcTime($database_name,$currentTime){ 

    global $startTime; 
    global $endTime; 

    ...calcutions 

    return $startTime; 
    return $endTime; 
}//end calcTime() 

입니다 않은 외부 기능에 사용

내 문제는 내부 함수 내부에서 선언 된 변수가 외부 함수로 전달되지 않는다는 것입니다. 변수 전역 변수를 선언하고 반환했습니다. 무슨 일인지 잘 모르겠다.

뭔가 재미 있지만, 만약 내가 echoTime ($ database_name, $ currentTime); $ startTime은 반환되지만 $ endTime은 반환되지 않습니다.

도와주세요. 나는이 방식으로 사용하고자하는 다른 기능을 통해 사용되는 기능을 가지고있다. 고맙습니다!!

+0

저는'global' PHP의 전문가는 아니지만, 적어도 여러분이 글로벌을 반환 할 필요가 없으며, 글로벌을 설정할 필요가 없다는 것을 알고 있습니다. ** ** ** ** ** ** ** ** ** ** ** ** 당신이 함수 안에서 사용하기 전에 이미 외부 코드 **에 존재하는 변수를 가질 때'global'이 사용되는 ** (그것이 확실하지 않은 곳)이라고 생각합니다. 그러나 코드 $ startTime은 함수 호출 전에 ** 사용되지 않습니다. 'list ($ startTime, $ endTime) = calcTime ($ database_name, $ currentTime);'을 사용하고 두 개의'global' 명령을 제거하십시오. 그리고 물론 두 개의 return을'return array ($ startTime, $ endTime);로 변경하십시오. – Aufziehvogel

+0

함수에서 한 번만 리턴 할 수 있습니다. 그러나 값 또는 객체 배열을 반환 할 수 있습니다. – knittl

답변

2

global 키워드를 PHP는 함수 외부에서 선언 된 전역 변수에 액세스하는 데 사용됩니다. 그것은 $var =& $GLOBALS['var'] 작성을위한 통사론적인 설탕입니다.

당신이 함수에서 두 개의 변수를 반환 할 수있는 방법을 적어도 두 가지 옵션이 있습니다 : 참조로 인수를 전달

function calcTime($database_name,$currentTime){ 
    return array('start' => $startTime, 'end' => $endTime); 
} 

$times = calcTime(…, …); 
echo $times['start'], ' and ', $times['end']; 
// or: 
list($start, $end) = calcTime(…, …); 
echo $start, ' and ', $end; 

또는 값 :-REF-전화 또는 배열을 반환

function calcTime($database_name,$currentTime, &$startTime, &$endTime){ 
    $startTime = …; 
    $endTime = …; 
} 

$startTime = 0; 
$endTime = 0; 
calcTime(…, …, $startTime, $endTime); 
echo $startTime, ' and ', $endTime; 
+0

완벽하게 설명해 주셔서 감사합니다. –

2

은 간단히 말해 : 호출 범위는 global 범위 중 하나가 작동을위한 그래서 ... 변수는 global를 선언 할 것입니다뿐만 아닙니다. 전역을 (이상) 사용하는 것은 나쁜 습관으로 간주되며, 동료 코더 (또는 시간이 지났을지라도)를 디버그하는 것이 좋습니다. 선호 파라미터 &이 반환됩니다.

** 당신은 단지 기능 범위

물론에 볼 수 있습니다 하나의 함수에서 전역 또는 변수를 설정하면 모든 기능을, PHP에 격리 된 기억 만 하나 값을 반환하지만 수

return array('startTime' => $startTime,'endTime' => $endTime); 
2

첫 번째 문제는 PHP에서 global이 비트 카운터 - 직관적이다 :뿐만 아니라 같은 더 복잡한 하나 일 수 있습니다. 나 혼란스러워. 함수 내부의 변수를 외부에 액세스 할 수 있도록하지는 않습니다. 오히려, 당신이 외부에 선언 된 기능, 예를 들어 변수를 사용할 수 있습니다 :

$foo = 'hello'; 
function bar() { 
    global $foo; 
    echo $foo; 
} 

당신이하고 싶은 변수를 모두 반환합니다. 그러나 return은 한 번만 사용할 수 있습니다. PHP가 return 문에 도달하면 함수를 종료하므로 두 번째 함수는 실행되지 않습니다.

내가 두 값을 모두 포함하는 배열을 반환하고 좋을 걸 뭐, 예를 들면 : 다음

return array('startTime' => $startTime, 'endTime' => $endTime); 

, 당신은 다시 변수 만들기 위해 extract를 사용할 수 있습니다

extract(calcTime()); 
echo $startTime; 
echo $endTime; 
+0

전역 문제를 설명해 주셔서 감사합니다. 나는 몰랐다. 함수 내에서 전역 변수를 선언하거나 함수를 통해 변수를 전달하는 것의 차이점은 무엇입니까? 예를 들어 위의 예에서 function bar ($ foo)가 아닌가? 그것도 같을까요, 그렇게하는 것이 유익할까요? –

+0

보다 적은 전역 변수가 좋습니다. 매개 변수로 변수를 전달할 수 있다면 그렇게하십시오. – knittl