[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: создание члена класса
notname
Всем привет!

Есть такой класс


class test
{
private $arr = array("test");
public function __construct()
{
$this->{$this->arr['0']} = "test";
}
}


new test;


У меня вопросы.
Насколько верен такой подход к созданию члена класса?
И стоит ли его применять если есть такая "задумка"?



Спустя 57 минут, 12 секунд (15.03.2011 - 21:41) sharki написал(а):
че эт ты замудрил такое непонятное, для чего?

Спустя 1 минута, 56 секунд (15.03.2011 - 21:43) neadekvat написал(а):
Не очень врубился, что тут происходит, но мб стоит посмотреть в сторону __set()?

Спустя 1 минута, 10 секунд (15.03.2011 - 21:44) sharki написал(а):
neadekvat
Set вызывает когда создают новое св-во извне класса, т.е после создания экземпляра класса

Спустя 1 минута, 44 секунды (15.03.2011 - 21:46) neadekvat написал(а):
sharki, а тут что? Когда конструктор то вызывается?

Спустя 1 минута, 5 секунд (15.03.2011 - 21:47) sharki написал(а):
neadekvat
В конструкторе мы явно знаем что получаем, что устанавливаем, а в set отправляются неизведанные поля
Бред какой то получается тогда biggrin.gif думаю ТС нужно еще подумать над тем, что он вообще хочет =)

Спустя 5 минут, 41 секунда (15.03.2011 - 21:53) neadekvat написал(а):
sharki, вот видите. Вы не поняли, что хочет автор, а уже спорите со мной :)

Спустя 1 час, 46 минут, 54 секунды (15.03.2011 - 23:40) doberman написал(а):
Цитата (notname @ 15.03.2011 - 17:44)
И стоит ли его применять если есть такая "задумка"?

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

Спустя 1 час, 13 минут, 10 секунд (16.03.2011 - 00:53) Guest написал(а):
Такая конструкция возможна для инициализации больших моделей, например данные формы или таблицы в БД. Пример AR. Но я бы не стал инициализировать непосредственно в конструкторе, опишите другой метод и в нём инициализируйте массив а после собирайте в конструкторе. Инициализация массива в другом методе даст гибкость в логике сокрытия наполнения массива любым образом - данные из БД, данные из XML будет не важно.

Спустя 3 минуты, 13 секунд (16.03.2011 - 00:56) Guest написал(а):
Цитата (doberman @ 15.03.2011 - 20:40)
Цитата (notname @ 15.03.2011 - 17:44)
И стоит ли его применять если есть такая "задумка"?

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

Так работают многие бессмысленные парсеры (XML ...) user posted image

Спустя 4 минуты, 18 секунд (16.03.2011 - 01:00) Guest написал(а):
Цитата (neadekvat @ 15.03.2011 - 18:53)
sharki, вот видите. Вы не поняли, что хочет автор, а уже спорите со мной smile.gif

Конструктор инициализирует первоначальное состояние объекта, сетеры же меняют его во время жизненного цикла объекта. Две абсолютно разных вещи со стороны проектирования.

Спустя 6 часов, 13 минут, 10 секунд (16.03.2011 - 07:13) neadekvat написал(а):
Цитата (Guest @ 16.03.2011 - 01:00)
Конструктор инициализирует первоначальное состояние объекта, сетеры же меняют его во время жизненного цикла объекта. Две абсолютно разных вещи со стороны проектирования.

Важен сам факт того, что объект уже будет.
Логично же, если автор спрашивает, верно/неверно, и мы что-то предлагаем - то придется вносить изменения.

Спустя 2 часа, 59 минут, 6 секунд (16.03.2011 - 10:13) linker написал(а):
Вот так правильно
class test
{
protected _prop = array();

public function __construct()
{
$this->test = "test";
}

public function __set($name, $value)
{
$this->_prop[$name] = $value;
}

public function __get($name)
{
return isset($this->_prop[$name]) ? $this->_prop[$name] : null;
}
}

Спустя 5 часов, 19 минут, 57 секунд (16.03.2011 - 15:32) Guest написал(а):
Цитата (neadekvat @ 16.03.2011 - 04:13)
Цитата (Guest @ 16.03.2011 - 01:00)
Конструктор инициализирует первоначальное состояние объекта, сетеры же меняют его во время жизненного цикла объекта. Две абсолютно разных вещи со стороны проектирования.

Важен сам факт того, что объект уже будет.
Логично же, если автор спрашивает, верно/неверно, и мы что-то предлагаем - то придется вносить изменения.

Не факт. При работе с моделями-формами объект не изменяется в течении всего жизненного цикла он остаётся "статичным", поэтому сеттеры ему не нужны. А вот пакетная инициализация свойств из селекторов формы это пожалуйста в конструкторе возможно.
Быстрый ответ:

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