2013-10-09 2 views
2

Ive는 이전에 비슷한 질문을했지만 실제로 명확하지 않았기 때문에보다 구체적인 예를 사용하기로 결정했습니다.PHP에서의 메모리 및 변수 할당에 대해서

PHP는 변수의 결과를 저장합니까, 아니면 실행하기위한 절차를 저장합니까? 기능을 실행 내가 그냥 값을 할당 발생했습니다에서

function foo($something) 
{ 

    for loop 
     { 
     echo 'Something'; 

     } 

    return $something; 
} 


$b = foo(5); 

: 왜 메신저 궁금해하는 것은 내가 그 안에 함수를 저장하는 경우, 그것은

말 절차를 반환 값을 저장하거나 복사 않습니다이다. 내가 dont 루프를 두 번 통과하고 내부에있을 수있는 두 번하고 싶지 않기 때문에 내가 원하지 않아.

+0

'for 루프를 두 번 통과하고 내부에있을 수있는 것을 두배로하고 싶다.'- 설명 할 수 있을까요? –

+1

"$ b = foo (5);"이 줄을 실행할 때 "함수를 저장하는 중"이 아닙니다. - 인수가 5 인 foo라는 함수를 실행하고 반환 된 값을 $ b라는 변수에 저장합니다. – MJB

답변

2

당신이 작성하는 경우 :

function foo() 
{ 
    return 5; 
} 
$a = foo(); 

이 의미하는 것 - $ A

에 결과를 함수 foo 저장을 실행

작성하는 경우 :

$a = function() 
{ 
    return 5; 
}; 
$a(); 

이렇게하면 - 함수의 코드를 variab에 저장합니다. le $ a, $ a에 저장된 함수를 실행한다

+0

함수가 객체에 저장되면 어떻게됩니까? 마찬가지로 나는 $ a = object-> 함수를 만들고 싶지만 바로 실행하지는 않습니다. – Dahnny012

+0

함수 이름을 변수에 저장하고 call_user_func (array ($ obj, 'functioname'), $ a)를 통해 호출 할 수 있습니다. 자세한 내용은 http://php.net/manual/en/function.call-user에서 확인하십시오. -func.php –

2

PHP는 strict programming language이며, 표현식은 항상 완전히 평가됩니다. 라인

$b = foo(5); 

은 할당 전에 foo(5)의 값을 계산합니다. PHP는 변수 $b이 사용될 때 평가할 thunk으로 두지 않습니다. 이 같은 클로저를 작성하여 썽크 비슷한을 달성 할 수에

은 당신이 원하는 경우

$b = function() { return foo(5); }; 

이 값이 필요할 때까지 foo(5)을 평가하지 않으며, 다음을 수행해야합니다 값을 얻기 위해 클로저는 $b()으로 전화하십시오. 둘 다 (저장 결과 또는 함수의 코드 중 하나)

을 가질 수 PHP에서

관련 문제