[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Избыточность свойств в классе
kamanch
Доброго времени.

Задача: скрипт этакого мини-форума.

Страница 1 : список заголовков тем.
Кликаем по теме, открылась Страница 2: текст темы и обсуждение.

Есть класс, который описывает тему (топик):
- заголовок темы;
- дата создание темы;
- автор темы;
- текст темы
- и т.д.

На Странице 1 выводим только заголовки тем.
Имеет ли смысл для Страницы 1 такой громоздкий объект, если нам необходимо только лишь одно его свойство (заголовок) ?

А описывать 2 класса (в первом только заголовок, во втором - весь остальной контент) - для Страницы 2 не очень элегантно smile.gif

Мучаюсь делемой...





Спустя 2 минуты, 24 секунды (3.07.2012 - 23:05) Игорь_Vasinsky написал(а):
а ты думаешь - элегантно написать 5 класов, которые возращают по свойству?

напиши метод - при вызове которого вернётся тока Заголовок.

Спустя 22 минуты, 32 секунды (3.07.2012 - 23:28) kamanch написал(а):
Игорь_Vasinsky
Спасибо за ответ.
Такой вариант тоже может быть.

Но я не учел в вопросе:

Свойства класса заполняются конструктором.

Class Topiс {
public $title;
public $autor;
public $date_add;
public $text;

public function __construct($t_id){
$query=....
....

$row=mysql_fetch....

$this->title=$row['title'];
$this->autor=$row['autor'];
$this->date_add=$row['date_add'];
$this->text=$row['text'];;
}

}


Так же красивее, нежеле создавать отдельный метод, который нужно будет потом вызвать для заполнения свойств.

И теперь возвращаемся к исходному вопросу. Как более эфективно:

Вариант 1: Два класса, где конструкторами заполняются то, что нам необходимо.
Вариант 2: Один класс, где свойства заполняются методами?

Хотя... с точки зрения читабельности без разницы, что $objTopic->title , что $objTopic->get_title()
Так что, думаю, Вариант 2 вполне приемлем и элегантен.

Спасибо форуму, что пока писал, получил возможность подумать :)

Спустя 2 минуты, 59 секунд (3.07.2012 - 23:31) Игорь_Vasinsky написал(а):
Цитата
Вариант 2: Один класс, где свойства заполняются методами?

солидарен.

Спустя 12 дней, 3 часа, 46 минут, 28 секунд (16.07.2012 - 03:17) kamanch написал(а):
Немного разовьем тему:

Есть класс у которого 50 свойств. Такой вот большой.
В разных скриптах используется разное количество свойств у объектов данного класса.
Следовательно, если скрипт использует лишь 3 из 50ти доступных свойств, то и заполняются эти свойства по мере необходимости методами.
Class A {
public property;

public function set_property() {
$this->property="property_value";
}
}


Теперь, прежде чем получить доступ к свойсву property нам необходимо его заполнить, вызвав метод set_property();
 $objA = new A();
$objA->set_property();
echo $objA->property;

Таким образом, нужно всегда контролировать: заполнено ли свойство перед обращением к нему.
Контролировать не хочется, да и где-нибудь все равно пропустится.

Теперь собственно вопрос:

Существует ли какой инструментарий, который бы при обращении к свойству объекта проверял бы, что если данное свойство не инициализировано, то запускается метод его заполнения.

Обходной путь я нашел.
Class A {
private property;

public function get_property() {
if($this->property == null) {
$this->property="property_value";
}
return $this->property;
}
}


$objA = new A();

echo $objA->get_property();


Но, может есть что получше? :)
Быстрый ответ:

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