2010-02-19 8 views
2

나는 PHP에 익숙하지 않고 아마존과 이베이로 웹 매쉬업을 만들려고 노력 중이다. 내 문제는 "printCategoryItems()"$ keyword라는 변수를 설정하는 함수가 있다는 것입니다. 이 변수를 코드의 다른 곳에 사용하고 싶지만 작동시키지 못합니다. 예를 들어 , 다른 함수에서 변수를 얻는 방법


<?php 
function printCategoryItems(){ 
    if(isset($_GET['keyword'])){ 
     $keyword = $_GET['keyword']; 
     ... 
    } 
} 
... 

$query = $keyword; 

... 

이 내가 할 노력하고 있어요 물건의 일종이다 그러나 나는 키워드에 대한 정의되지 않은 변수 오류가 결국

. 내가하려고하는 일을 내가 할 수있는 방법이 있습니까?

미리 도움을 주셔서 감사합니다.

(만 가지고 자바 프로그래밍 경험)

답변

2

복귀 기능

return $keyword; 

하고 기능을 또한

$query = printCategoryItems(); 

를 호출 할 때 할당에서 변수, 당신 $query을 빈 문자열로 선언하고 참조로 함수에 전달할 수 있습니다. printCategoryItems(&$query). 또는 클래스에 코드를 래핑하고 $query을 인스턴스 변수로 만들 수 있으므로 $this->query = $keyword으로 설정할 수 있습니다.

그러나, printCategoryItems()이라는 함수에서 뭔가를 설정하는 것이 아니라 화면에 무엇인가를 인쇄 할 것을 기대합니다. 함수의 책임을 고려할 수 있습니다.

+1

이것은 이러한 문제를 해결하는 가장 좋은 방법입니다. –

-1

당신은 다른 곳에서 정의 된 변수에 액세스 할 있지만, 내부 및 기능의 외부 그것을 액세스 global 키워드를 앞에하려면 :

function printCategoryItems(){ 
    if(isset($_GET['keyword'])){ 

     global $keyword = $_GET['keyword']; 
     ... 
    } 
} 
+2

PHP는 자바 스크립트가 아니므로 방법 1이 작동하지 않습니다. 'global'을 사용하는 것은 나쁜 습관으로 간주됩니다. – Gordon

+0

@Gordon : 그게 무슨 뜻입니까? – Sarfraz

+1

Javascript에서는 함수 범위 밖에서 변수를 정의 할 수 있습니다. 내부에서 호출하면 거품이 발생하지만 PHP에서는 그렇지 않습니다. 첫 번째 예에서 함수의 $ 키워드는 외부의 $ keyword를 참조하지 않습니다. 함수. 그것은 두 개의 분리 된 변수입니다. – Gordon

5

당신은 global 키워드를 사용할 수 있습니다 함수의 함수이므로 내부 $keywords 함수 외부 $keywords 지칭 :

function printCategoryItems() { 
    global $keyword; 
    if(isset($_GET['keyword'])){ 
     $keyword = $_GET['keyword']; 
    } 
} 

printCategoryItems(); 
var_dump($keyword); 

이되는 내부 변수 때문에 함수는 함수의 로컬 범위에 속하지만 전역 범위 에 속하지 않습니다 (오랫동안 어떤 JAVA도하지 않았지만 JAVA에서 동일하다고 생각합니다. 함수 내부에 선언 된 변수는 외부에서 볼 수 없습니다. 그 기능의).


그러나 글로벌 변수를 사용하는 은 일반적으로 좋은 아이디어가 아닙니다. ...더 나은 해결책은 귀하의 기능을 가지고있을 것입니다 return 데이터; 예를 들면 :

반 측 노트로
function printCategoryItems() { 
    if(isset($_GET['keyword'])){ 
     return $_GET['keyword']; 
    } 
} 

$keyword = printCategoryItems(); 
var_dump($keyword); 


:

function printCategoryItems() { 
    if(isset($_GET['keyword'])){ 
     $GLOBALS['keywords'] = $_GET['keyword']; 
    } 
} 

printCategoryItems(); 
var_dump($GLOBALS['keywords']); 
: (다시 좋은 생각) 다른 해결책, 여전히 글로벌 변수 $GLOBALS superglobal array를 사용하는 것

여기에서 global 키워드가 더 이상 필요하지 않습니다.


그리고 끝내려면 PHP 설명서 - 특히 the part about Functions을 읽어야합니다.

1

야당은 global에 동의합니다. 당신은 global을 피할 수 있습니다. 그냥 피하십시오. 생각하지 말고 피하십시오. 그리고 PHP에서는 어떤 시나리오도 생각할 수 없습니다. global을 피할 수 없었습니다.

관련 문제