Как вообще это можно сделать не используя глобальные переменные.
Я попробовал написать но не работает как надо.
Пример:
function _setVar($name, $values='') {
static $var = array();
//если в массиве $var уже есть данный ключ то выводим значении это ключа .
if(isset($var[$name]) && empty($values)) return $var[$name];
if(!empty($name) && !empty($values)) {
$var[$name] = $values;
}
return $var;
}
function _getVar($name) {
if(!empty($name)) {
return _setVar($name);
}
return;
}
Спустя 14 минут, 44 секунды (8.05.2011 - 12:37) neadekvat написал(а):
Почему функция установки возвращает значение, а фунцкия, которая должна возвращать, ссылается на функцию установки? :blink:
1. Без global не получится.
2. Каждая функция выполняет только то, что она должна выполнять.
3. Убрал проверку на пустое значение при присвоении. Бывает, нужно присвоить это самое пустое значение.
$var = array();
function _setVar($name, $values = '')
{
global $var;
if ( ! empty($name))
$var[$name] = $values;
}
function _getVar($name)
{
global $var;
if (isset($var[$name]))
return $var[$name];
return null;
}
1. Без global не получится.
2. Каждая функция выполняет только то, что она должна выполнять.
3. Убрал проверку на пустое значение при присвоении. Бывает, нужно присвоить это самое пустое значение.
Спустя 4 минуты, 22 секунды (8.05.2011 - 12:41) Th!nk3r написал(а):
А как тогда обезопасить код от глобальных переменных а то я их сильно боюсь. =)
Спустя 1 минута, 17 секунд (8.05.2011 - 12:42) neadekvat написал(а):
Цитата (Th!nk3r @ 8.05.2011 - 13:41) |
А как тогда обезопасить код от глобальных переменных а то я их сильно боюсь. =) |
А что в них страшного?
Спустя 29 секунд (8.05.2011 - 12:43) Th!nk3r написал(а):
обратите внимание на статическую переменную. Я думаю ответ сразу будет понятен.
Спустя 3 минуты, 51 секунда (8.05.2011 - 12:47) Th!nk3r написал(а):
Функция getVar нужна для того что бы не запутаться.
Спустя 12 минут, 36 секунд (8.05.2011 - 12:59) Th!nk3r написал(а):
Могу конечно ошибается но где то читал что у глобальной переменной можно изменить значение.
Спустя 6 минут, 49 секунд (8.05.2011 - 13:06) neadekvat написал(а):
Цитата (Th!nk3r @ 8.05.2011 - 13:43) |
обратите внимание на статическую переменную. Я думаю ответ сразу будет понятен. |
Это из области ООП, зачем она тут?
Цитата (Th!nk3r @ 8.05.2011 - 13:59) |
Могу конечно ошибается но где то читал что у глобальной переменной можно изменить значение. |
Для того она и создана, чтобы можно было в функции изменять ее значение, не передавая переменную по ссылке.
Спустя 3 минуты, 58 секунд (8.05.2011 - 13:10) Nikitian написал(а):
Вроде так вполне должно работать. Кстати, идея интересная и в чём-то даже правильная - засорять глобальную область видимости действительно нехорошо.
neadekvat, статичные переменные можно использовать и в функциях
function _setVar($name, $values=null) {
static $var = array();
//если в массиве $var уже есть данный ключ то выводим значении это ключа .
if(array_key_exists($name,$var)) return $var[$name];
if($values!==null) {
$var[$name] = $values;
return true;
}
return false;
}
function _getVar($name) {
return _setVar($name);
}
neadekvat, статичные переменные можно использовать и в функциях
Спустя 8 минут, 6 секунд (8.05.2011 - 13:18) neadekvat написал(а):
Жесть какая.
Спустя 23 часа, 25 минут, 29 секунд (9.05.2011 - 12:43) Th!nk3r написал(а):
Nikitian
Спасибо, все прекрасно работает.
Спасибо, все прекрасно работает.
Спустя 11 часов, 5 минут, 36 секунд (9.05.2011 - 23:49) linker написал(а):
Суть __set() и __get() в их неявном вызове и называется оно инкуапсуляция и работает только в ООП.