2012-05-09 3 views
0

내가이 말 범위 ... PHP 함수 변수

function one($x){ 
    return $a + $x; 
} 

function two(){ 
    $a = 5; 
    echo one(3); 
} 

이 답 "8"또는 "3"을 표시됩니까? 다시 말해서, $ a의 값을 얻거나 그 어딘가에서 전역 적으로 선언해야합니까?

N.B. 나는 그것을 아직 시도하지 않았지만, 그것이 어떤 방향으로 작용하는지 또는 다른 방향으로 작용 하는지를 이해하기 위해 여기에서 요구하고있다.

+1

미터 다음에 클래스를 작성해야합니다. 그런 다음 모든 메소드는 해당 메소드에서 사용할 수 있습니다. 코드를 추하게 만들지 마라 !!! –

+0

@LawrenceCherone 예제를 사용하여 클래스를 사용하는 예제를 제공 할 수 있습니까? –

+0

소프트웨어 디자인에 대한 기본적인 질문으로 돌아가고 하나의 예를 통해 거의 대답 할 수 없으므로 다소 광범위합니다. 다음과 같은 비슷한 질문으로 시작하십시오 : http://stackoverflow.com/questions/5861163/php-function-design-passing-parameters – deceze

답변

3

기능 없음 one$a을 알고하지 않습니다. 그러나 이것은 할 수 있습니다. 이제 two()

$a = 5; 

function one($x){ 
global $a; 
return $a + $x; 
} 

function two(){ 
global $a; 
$a = 5; 
echo one(3); 
} 

당신이 당신의 변수를 할당, 당신의 예에 가깝게 클래스를 사용하여 더 사용 내역을 알 수 없습니다하는 경우 8

+0

'global' 범위 사용 물론 당신이하고 싶은 것이 아닙니다. 제한된 함수 범위는'global'을 사용하여 "주위에서"처리해야하는 것이 아니라 여러분의 이익을 위해 작동하는 * 기능 *입니다. – deceze

+0

@ Broncha 제 변수 $ a를 함수 2로 선언해야합니다. 어떻게해야합니까? –

+0

이것은 질문에 대한 대답 일뿐입니다. 그는 그가 가지고있는 것이 가능한지 물었고, 나는 이것이 그가 요구 한 것에 가능할 것이라고 대답했다. 이것을 수행하는 다른 방법은 OOP이며 클래스 변수와 멤버 메소드를 정의합니다 .. – Broncha

1

함수는 함수를 호출하는 함수의 고유 한 범위가 아닙니다. (없으며 기본적으로 전역 변수를 상속 할 -. 즉 global 키워드가 무엇인지입니다)

따라서, $a가 완전히 one()의 내부에 정의되지 않습니다 당신이 그것에 대해 통지를 얻을 것이다.

자세한 내용은 PHP 설명서의 Variable Scope 페이지를 참조하십시오.

1

8 또는 3을받지 못합니다. $a이 기능 one의 범위에 정의되지 않았기 때문에 당신은 공지 사항을 얻을 것이다, 당신은 그것을 읽으려고 :

PHP Notice: Undefined variable: a in - on line 3 
PHP Stack trace: 
PHP 1. {main}() -:0 
PHP 2. two() -:11 
PHP 3. one() -:8 
1

에코 것 $this->* 다음이 글로벌 클래스 내에서 범위와 방법/기능 또한 $functions->a 같은 클래스의 외부에서 액세스 할 수 있습니다 :

대신 당신이 당신의 기능은 파라 많이 필요로하는 지점에 도착 경우, 매개 변수로 전달해야 global``사용
<?php 
Class functions{ 

    function one($x){ 
     return $this->a + $x; 
    } 

    function two(){ 
     $this->a = 5; 
     echo $this->one(3); 
    } 

} 

$functions = new functions(); 

$functions->two(); //8 

echo $functions->a;//5 
?> 
+0

많은 감사합니다 - 이것은 많은 도움이 될 수 있습니다. –