Проблема глобальных переменных PHP - PullRequest
0 голосов
/ 26 октября 2011

У меня здесь проблема с объемом.и понятия не имею, почему он не работает, я получил настройку следующим образом:

functions.php

global $id;
$id = $_GET['id'];

index.php

require_once('functions.php');
echo $id;

теперь внутри functions.phpя могу повторить $ id.однако мой echo $ id;внутри index.php выводится пробел.абсолютно ничего.

что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

В PHP ключевое слово global позволяет ссылаться на переменные в глобальной области видимости из локальной области видимости, например, для доступа к глобальной переменной внутри функции.Вам не нужно global в вашем примере, потому что вы все равно находитесь в глобальной области видимости.

Я подозреваю, что вы показываете нам упрощенную версию того, что у вас есть, где проблема в коде, которого у вас нет 't показал нам.

Почему вы не должны использовать глобалы

Подобная путаница является частью того, почему использование глобалов - плохая идея, и ее следует избегать.

Альтернативой является явная передача переменных, например, если вы вызываете функцию или создаете экземпляр класса из другого файла, вы передаете переменную в качестве параметра этой функции или конструктору.Это вместо того, чтобы использовать глобальные переменные, облегчает отслеживание того, какая функция обращается к какой переменной, потому что вы можете легче следовать по следу.

1 голос
/ 26 октября 2011

Вам не нужны глобалы между файлами, только для функций.

Functions.php

<?php
$foobar = "Hello";
?>

Index.php

<?php
include('Functions.php');
echo $foobar;
?>
0 голосов
/ 26 октября 2011

@ thomasrutter правильный (+1) Глобальные переменные A Bad Thing.Всегда ищите альтернативы.

Возможно, вы можете использовать $ _SESSION (что-то вроде того же самого, я знаю) или объявить класс, который имеет статическую переменную и использовать getter () и setter ()(последнее определенно чище, но $ _SESSION может лучше сочетаться с вашим дизайном, я не могу сказать)

Кстати, я надеюсь, что functions.php было просто примером имени, или что у вас внешнепростой проект.

В противном случае fucntions.ph p станет экстремально большим и трудным для наблюдения.Если вы используете OO, используйте один файл для каждого класса, в противном случае попробуйте сгруппировать ваши функции в отдельные файлы (file_management.php, databse.php, forms.php и т. П.).

Если вы только начинаетеЯ бы посоветовал вам использовать Netbeans и документировать свой код с помощью комментариев PhpDoc , которые позволят вам создать хорошую документацию, которую вы сможете просмотреть в своем браузере (включая структуру вашего кода,что объявляется где, где используется, описание параметров функции и возвращаемых значений и т. д.)

Кстати, я заметил, что вы используете include() Я предпочитаю require_once._once немного помогает скорректировать dperformnce, а require гарантирует, что вы быстрее узнаете об отсутствующих файлах.

О, и научитесь использовать Xdebug, который хорошо работает с NetBeans .

0 голосов
/ 26 октября 2011

Вы не должны использовать глобалы, но у вас есть это задом наперед.Вы объявляете переменную глобальной после включения ее определения:

file1.php:

$name = 'Josh';

file2.php:

require_once('file1.php');

global $name;

echo $name;
...