ФорумПрограммированиеPHP для идиотовPHP и ООП → Как грамотней?

Как грамотней?

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 31 августа 2008 г. 9:37

    Как всегда, пример — новости. Новости можно добавлять, редактировать, удалять.
    Какая реализация грамотней?

    1. Вариант номер раз.
    class News
    {
    private $id;
    private $properties = array();

    public function __construct($id = NULL)
    {
    if ($id === NULL)
    return;

    $this->id = $id;

    $result = mysql_query('SELECT * FROM `news` WHERE `id`="'.$id.'" LIMIT 1');

    if (!$row = mysql_fetch_assoc($result)) {
    unset($this->id)
    return;
    }

    $this->properties = mysql_fetch_assoc($result);
    }

    public function add($data)
    {
    $this->properties = $data;

    mysql_query('INSERT INTO `news` …');

    $this->id = mysql_insert_id();

    return $this->id;
    }

    public function edit($data)
    {
    if (!isset($this->id) || !$this->id)
    return false;

    $this->properties = $data;

    mysql_query('UPDATE `news` … WHERE `id`="'.$this->id.'" LIMIT 1');

    return true;
    }

    public function delete()
    {
    if (!isset($this->id) || !$this->id)
    return false;

    mysql_query('DELETE FROM `news` WHERE `id`="'.$this->id.'" LIMIT 1');

    return true;
    }
    }


    2. Вариант номер два.
    class News
    {
    private $id;
    private $properties = array();

    public function __construct($id)
    {
    $this->id = $id;

    $result = mysql_query('SELECT * FROM `news` WHERE `id`="'.$id.'" LIMIT 1');

    if (!$row = mysql_fetch_assoc($result)) {
    unset($this->id)
    return;
    }

    $this->properties = mysql_fetch_assoc($result);
    }

    static function add($data)
    {
    mysql_query('INSERT INTO `news` …');

    return mysql_insert_id();
    }

    public function edit($data)
    {
    if (!isset($this->id) || !$this->id)
    return false;

    $this->properties = $data;

    mysql_query('UPDATE `news` … WHERE `id`="'.$this->id.'" LIMIT 1');

    return true;
    }

    public function delete()
    {
    if (!isset($this->id) || !$this->id)
    return false;

    mysql_query('DELETE FROM `news` WHERE `id`="'.$this->id.'" LIMIT 1');

    return true;
    }
    }


    3. Вариант номер три.
    class News
    {
    private $id;
    private $properties = array();

    public function __construct($id)
    {
    $this->id = $id;

    $result = mysql_query('SELECT * FROM `news` WHERE `id`="'.$id.'" LIMIT 1');

    if (!$row = mysql_fetch_assoc($result)) {
    unset($this->id)
    return;
    }

    $this->properties = mysql_fetch_assoc($result);
    }

    public function edit($data)
    {
    if (!isset($this->id) || !$this->id)
    return false;

    $this->properties = $data;

    return true;
    }

    public function save_to_db()
    {
    if (!isset($this->id) || !$this->id)
    return false;

    mysql_query ('UPDATE `news` … WHERE `id`="'.$this->id.'" LIMIT 1');

    return true;
    }

    static function add($data)
    {
    mysql_query('INSERT INTO `news` …');

    return mysql_insert_id();
    }

    static function delete($id)
    {
    mysql_query('DELETE FROM `news` WHERE `id`="'.$id.'" LIMIT 1');

    return true;
    }
    }
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 31 августа 2008 г. 10:12, спустя 34 минуты 42 секунды

    sap, прости конечно… но имхо, тебе занятся нечем. Сделай так, как тебе удобно. И не страдай хуйней.
    adw/0
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 10:22, спустя 10 минут 27 секунд

    Ммммм, первый! Остальные лень было читать =)
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 10:29, спустя 6 минут 56 секунд

    нафига вообще эти классы нужны?) объясните дураку…
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 31 августа 2008 г. 11:04, спустя 34 минуты 47 секунд

    Frozzeg, классы нужны для ОО-парадигмы. Зачем тебе ОО-парадигма нужна, не знаю. Тебе решать.
    adw/0
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 31 августа 2008 г. 11:22, спустя 17 минут 47 секунд

    sap, прости конечно… но имхо, тебе занятся нечем. Сделай так, как тебе удобно. И не страдай хуйней.

    Так воскресенье ж :)
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 12:42, спустя 1 час 19 минут 37 секунд

    "Найди 3 отличия"? :)

    sap, интерфейс классов практически одинаковый, что именно должно быть "грамотней"?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 12:52, спустя 10 минут 49 секунд

    Найди 3 отличия

    Я реально искал )
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 31 августа 2008 г. 12:55, спустя 2 минуты 33 секунды


    "Найди 3 отличия"? :)

    sap, интерфейс классов практически одинаковый, что именно должно быть "грамотней"?

    Статичные функции :) Или не статичные. Редактирование — изменение свойств и запись в базу одной функцией, или одной изменение свойств, а другой запись в базу?
    Может ли обьект удалять сам себя из базы? Вот, в основном, в чем вопросы.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 12:56, спустя 44 секунды

    статичные вроде как быстрее
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 31 августа 2008 г. 13:00, спустя 4 минуты

    Меня в большей степени интересует с точки зрения проектирования, а не быстродействия.
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 31 августа 2008 г. 13:20, спустя 20 минут 29 секунд

    Редактирование — изменение свойств и запись в базу одной функцией, или одной изменение свойств, а другой запись в базу?

    как удобней. У меня, например, для сохранения записи есть единственный метод - save(), который проверяет - если id известен, то "update", иначе "insert". А для каждого поля свои get и set методы. Не знаю насколько это грамотно, но мне так удобно.

    Может ли обьект удалять сам себя из базы?

    почему бы и нет?

    статичные вроде как быстрее

    aivee, фигня =)

    Вообще подобные темы уже поднимались: http://pyha.ru/forum/topic/563.0
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 1 сентября 2008 г. 0:40, спустя 11 часов 19 минут 34 секунды

    простите что туплю но какой нафиг ретурн в конструкторе о_О
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 1 сентября 2008 г. 2:30, спустя 1 час 50 минут 16 секунд

    Вот и я думаю.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!