2010-02-19 5 views
2

Я новичок в PHP, и я пытаюсь создать веб-mashup с amazon и ebay. Моя проблема в том, что у меня есть функция под названием «printCategoryItems()», которая устанавливает переменную с именем $ keyword. Я хочу использовать эту переменную в другом месте кода, но я не могу заставить ее работать. Для примера,Как получить переменную от другой функции


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

$query = $keyword; 

... 

Это та вещь, я пытаюсь сделать, но я в конечном итоге получить неопределенную переменную ошибки для ключевого слова. Есть ли способ сделать то, что я пытаюсь сделать?

Спасибо за вашу помощь заранее.

(только есть Java Опыт программирования)

ответ

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 не Javascript, поэтому метод 1 не будет работать. И использование 'global' считается плохой практикой. – Gordon

+0

@ Gordon: Что это значит? – Sarfraz

+1

В Javascript вы можете определить переменную за пределами области действия, и при вызове внутри она будет пузыриться, но это не так в PHP, поэтому в вашем первом примере ключевое слово $ внутри функции не будет ссылаться на ключевое слово $ вне функция. Это две отдельные переменные. – 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); 


В полу-боковой ноте: другое решение, по-прежнему с глобальными переменными (не очень хорошая идея, опять же) будет использовать $GLOBALS superglobal array:

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

printCategoryItems(); 
var_dump($GLOBALS['keywords']); 

Здесь больше не нужно ключевое слово global.


И, чтобы закончить, вы должны прочитать документацию по PHP - особенно the part about Functions.

1

Полностью согласен с сопротивлением global. Всюду вы можете избежать global, просто избегайте этого. Не думайте, но избегайте. И в PHP я не могу думать ни о каком сценарии, где вы не могли избежать global.

 Смежные вопросы

  • Нет связанных вопросов^_^