Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переход на использование на глобальных массивов.
 
 автор: кен   (13.06.2005 в 12:28)   письмо автору
 
 

Раньше я вместо глобальных массивов работал с простыми переменными - использовал возможности 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().
Что скажете про этот пример с функцией? И есть ли у кого какие аргументы против работы с глобальными массивами?

   
 
 автор: XPraptor   (13.06.2005 в 13:21)   письмо автору
 
   для: кен   (13.06.2005 в 12:28)
 

global $_SESSION; - Зачем? Это уже существующий на уровне системы суперглобальный массив.

   
 
 автор: cheops   (13.06.2005 в 13:31)   письмо автору
 
   для: кен   (13.06.2005 в 12:28)
 

Не следует объявлять массив $_SESSION глобальным
<?php
global $_SESSION;
?>

Он сам по себе всегда глобальный - так вы только затираете его новым массивом, область действия которого - скрипт.

   
 
 автор: antf   (13.06.2005 в 14:28)   письмо автору
 
   для: cheops   (13.06.2005 в 13:31)
 

Можно ли передавать элементы глобальных массивов в качестве параметров функции?

$price = get_price($_SESSION['id_user']);

Будет ли такой код корректно работать?

   
 
 автор: XPraptor   (13.06.2005 в 14:52)   письмо автору
 
   для: antf   (13.06.2005 в 14:28)
 

Конечно будет! Но можно юзать и сразу в функции зачем передавать, если оно доступно в любом месте.

   
 
 автор: isset   (13.06.2005 в 14:54)   письмо автору
 
   для: XPraptor   (13.06.2005 в 14:52)
 

Ага.
Зачем лишний раз суперглобалы гонять. Простой пример, с тобой живет друг, ему надо купить хлеб. Легче будет тебе сходить за ним и отдать другу или сходить другу за ним? Конечно же второе.

   
 
 автор: antf   (13.06.2005 в 16:42)   письмо автору
 
   для: isset   (13.06.2005 в 14:54)
 

Объявление функции:

function get_price($id_user)


Функция оперирует переменной $id_user. Возможно ли изменение глобальное переменной $_SESSION['id_user'] при манипуляциях с переменной $id_user внутри функции, если register_globals = 'on'?

   
 
 автор: glsv (Дизайнер)   (14.06.2005 в 06:39)   письмо автору
 
   для: antf   (13.06.2005 в 16:42)
 

Нет, если переменной $id_user вы манипулируете только внутри функции, то влияния на глобальную переменную $_SESSION['id_user'] она не окажет.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования