[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: методы __set и __get с помощью функций.
Th!nk3r
Добрый день. Как лучше написать с помощью функции аналог методов __set и __get.
Как вообще это можно сделать не используя глобальные переменные.
Я попробовал написать но не работает как надо.
Пример:

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:
$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 написал(а):
Вроде так вполне должно работать. Кстати, идея интересная и в чём-то даже правильная - засорять глобальную область видимости действительно нехорошо.

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() в их неявном вызове и называется оно инкуапсуляция и работает только в ООП.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.