|
|
|
| Раньше я вместо глобальных массивов работал с простыми переменными - использовал возможности register_globals = On. Это упрощает написание кода, но его наглядность снижается и легко сделать трудноуловимую ошибку. Поэтому решил наконец "улучшить свой стиль программирования" и перейти к использованию глобальных массивов. Попробовал - и кое-что насторожило! :(
Вот, например, опыт с регистрацией в сеансе переменной-счётчика.
Пробую через функцию:
<?
session_start();
SES_VAR_INI();
echo ++$_SESSION['count'];
function SES_VAR_INI() {
global $_SESSION;
if (empty($_SESSION['count'])) $_SESSION['count'] = 0;
}
?>
|
Попробуйте релоад - облом! А если напрямую, то всё в порядке:
?<
session_start();
if (empty($_SESSION['count'])) $_SESSION['count'] = 0;
echo ++$_SESSION['count'];
?>
|
Как оказалось, в варианте с функцией переменная создаётся, но в сеансовый файл не записывается! Поэтому "прямой" вариант кода работает, а вариант с функцией - нет. Но это же просто безобразие! Ведь если глобальные массивы неадекватно ведут себя в функциях, то грош им цена, уж лучше тогда делать как раньше - через session_register().
Что скажете про этот пример с функцией? И есть ли у кого какие аргументы против работы с глобальными массивами? | |
|
|
|
|
|
|
|
для: кен
(13.06.2005 в 12:28)
| | global $_SESSION; - Зачем? Это уже существующий на уровне системы суперглобальный массив. | |
|
|
|
|
|
|
|
для: кен
(13.06.2005 в 12:28)
| | Не следует объявлять массив $_SESSION глобальным
<?php
global $_SESSION;
?>
|
Он сам по себе всегда глобальный - так вы только затираете его новым массивом, область действия которого - скрипт. | |
|
|
|
|
|
|
|
для: cheops
(13.06.2005 в 13:31)
| | Можно ли передавать элементы глобальных массивов в качестве параметров функции?
$price = get_price($_SESSION['id_user']);
Будет ли такой код корректно работать? | |
|
|
|
|
|
|
|
для: antf
(13.06.2005 в 14:28)
| | Конечно будет! Но можно юзать и сразу в функции зачем передавать, если оно доступно в любом месте. | |
|
|
|
|
|
|
|
для: XPraptor
(13.06.2005 в 14:52)
| | Ага.
Зачем лишний раз суперглобалы гонять. Простой пример, с тобой живет друг, ему надо купить хлеб. Легче будет тебе сходить за ним и отдать другу или сходить другу за ним? Конечно же второе. | |
|
|
|
|
|
|
|
для: isset
(13.06.2005 в 14:54)
| | Объявление функции:
function get_price($id_user)
|
Функция оперирует переменной $id_user. Возможно ли изменение глобальное переменной $_SESSION['id_user'] при манипуляциях с переменной $id_user внутри функции, если register_globals = 'on'? | |
|
|
|
|
|
|
|
для: antf
(13.06.2005 в 16:42)
| | Нет, если переменной $id_user вы манипулируете только внутри функции, то влияния на глобальную переменную $_SESSION['id_user'] она не окажет. | |
|
|
|