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

непонятки с ООП

  • Nyaah

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

    Spritz 11 февраля 2010 г. 18:13, спустя 5 часов 31 минуту 7 секунд

    Чёрт, хотите из моего потока сознания что-то полезное сделать? Можно попробовать конечно, но толку, если для новичков, то нужно будет разжовывать что такое паттерн программирования, зачем это надо и так далее, дофига нужно дописывать, чтоб статья адекватная получилась…

    SpartakuS
    #Правильно. Этот метод нужен для того чтобы уничтожать объект не так unset($db), а так $db->destroy()

    Если бы ты писал на C++ и инстанс бд у тебя передавался бы как указатель, то смысл есть, но тут пхп =) При уничтожении объекта вызывается деструктор и именно в нём должен быть код, подчищающий за собой мусор, это раз, во вторых unset($this); - это плохо, вернее бессмысленно, ты удаляешь локальную переменную внутри функции, снаружи на объект это никак не повлияет:
    class Test
    {
    protected $_id;
    protected static $_max = 1;

    public function __construct()
    {
    $this->_id = self::$_max;
    self::$_max += 1;
    }

    public function destroy()
    {
    unset($this);
    }

    public function getId()
    {
    return $this->_id;
    }
    }

    $a = new Test();
    $b = new Test();

    echo 'Перед удалением $a: a->id=' . $a->getId() . "\n"; // Перед удалением $a: a->id=1
    $a->destroy();
    echo 'После удаления $a: a->id=' . $a->getId() . "\n"; // После удаления $a: a->id=1

    echo 'Перед удалением $b: b->id=' . $b->getId() . "\n"; // Перед удалением $b: b->id=2
    $b->destroy();
    echo 'После удаления $b: b->id=' . $b->getId() . "\n"; // После удаления $b: b->id=2


    По поводу закрытия соединения, чистки результата запроса - незнаю, дело твоё, но я считаю что нужно вызывать mysql_close|mysql_free_result, правило хорошего тона так сказать. Плюс если ты выбрал где-нить кучу строк и не удалил ссылку на результат, он так и будет висеть до того пока скрипт не отработает, в итоге запрос тут, запрос там и 10 мегабайт памяти отожрали =)

    Work, buy, consume, die
  • Trej Gun

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

    Spritz 11 февраля 2010 г. 22:26, спустя 4 часа 13 минут 10 секунд

    Чёрт, хотите из моего потока сознания что-то полезное сделать? Можно попробовать конечно, но толку, если для новичков, то нужно будет разжовывать что такое паттерн программирования, зачем это надо и так далее, дофига нужно дописывать, чтоб статья адекватная получилась…


    главное что мы в тебя верим
  • kamachi

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

    Spritz 12 февраля 2010 г. 20:15, спустя 21 час 48 минут 48 секунд

    как вам такой код, я ооп немного догнал)))


    class userRule
    {
    public $table;
    public $chto;
    public $chemy;
    public $name;


    public function get_from_table($table,$chto,$chemy)
    {
    $this->table = $table;
    $this->chto = $chto;
    $this->chemy = $chemy;

    $sql = mysql_query("SELECT * FROM {$this->table} WHERE {$this->chto}={$this->chemy}");
    return $mas = mysql_fetch_array($sql);
    }


    public function get_user_info($table,$chto,$chemy)
    {
    $this->table = $table;
    $this->chto = $chto;
    $this->chemy = $chemy;

    $mas = $this->get_from_table($table,$chto,$chemy);
    return $mas;
    }

    }


    $obj = new userRule();
    $mas = $obj->get_user_info('user','id',1);

    echo $mas['name'];
    Спустя 118 сек.
    ну или такой

    class DB_use
    {

    //set_inma присваивает члену $inma содержание запроса из переменной $var
    //возврашяет член inma
    //q получает содезжание запроса, передает его методу set_inma(который возвращает член inma)
    //затем метод q выполняет запрос и возвращает true при успешном выполнении или false

    private $inma;

    public function set_inma($var)
    {
    $this->inma = $var;
    return $this->inma;
    }

    public function q($var)
    {
    $this->set_inma($var);

    if(mysql_query($this->inma))
    {
    return true;
    } else {
    return false;
    }
    }

    }
  • Ewg777

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

    Spritz 12 февраля 2010 г. 20:18, спустя 3 минуты 11 секунд

    kamachi, хороший пример использования синтаксиса ООП для создания сборника функции.  
    Спустя 53 сек.
        if(mysql_query($this->inma))
           {
               return true;
           } else {
               return false;
           }
    Вам точно ООП ещё рано. Конкретно здесь:
    return mysql_query($this->inma);
    Всё
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 12 февраля 2010 г. 20:18, спустя 23 часа 59 минут 58 секунд

    kamachi, я не претендую на истинность, но по-моему херь какая то.
    1) Зачем этот класс?
    2) Почему этот класс знает о базе
    3) Зачем ты это делаешь?
            $this->table = $table;
           $this->chto = $chto;
           $this->chemy = $chemy;
  • NRG

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

    Spritz 12 февраля 2010 г. 20:21, спустя 3 минуты 49 секунд

    return $mas = mysql_fetch_array($sql);

    зачем тут обьявление переменной ??
    Спустя 87 сек.
    опять же…
    $mas = $this->get_from_table($table,$chto,$chemy);
    return $mas;


    почем у сразу не так ?
    return $this->get_from_table($table,$chto,$chemy);
    Спустя 105 сек.
    public function set_inma($var)
    {
    $this->inma = $var;
    return $this->inma;
    }

    сеттеры обычно выглядят так :

    public function setInma($var)
    {
    $this->inma = $var;
    return $this;
    }
  • kamachi

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

    Spritz 12 февраля 2010 г. 20:22, спустя 47 секунд

    NRG ,да хз….

    Зачем ты это делаешь? - понять пытаюсь…
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 12 февраля 2010 г. 20:35, спустя 12 минут 23 секунды

    Возьмем вот этот класс. Попытаюсь откомментить. Матерые ООПшники поправят если что.

    class userRule
    {
       public $table; //
       public $chto; // Зачем эти переменные в паблике?
       public $chemy; //
       public $name; //
     
       // Читай сначала мои комментарии к методу гет юзер инфо
       public function get_from_table($table,$chto,$chemy) //Должно быть в другом классе.
       {
           $this->table = $table; //
           $this->chto = $chto; // Зачем ты их задаешь? Ты их уже задал, когда гетюзер инфо писал
           $this->chemy = $chemy; //
         
           $sql = mysql_query("SELECT * FROM {$this->table} WHERE {$this->chto}={$this->chemy}"); // Тут правильно вроде
           return $mas = mysql_fetch_array($sql); // И что ты получишь, если к примеру введешь WHERE `usergroup` = 4? При этом у на 15 штук юзеров с этой юзергуппой.
       }
     
     
       public function get_user_info($table,$chto,$chemy)
       {
           $this->table = $table; //
           $this->chto = $chto; // Итак, заебись. Задали переменные, которые нам передали из программы.
           $this->chemy = $chemy; //
         
           $mas = $this->get_from_table($table,$chto,$chemy); // Зачем ты эти переменные передаешь в другую функцию, ты их уже сделал членами класса
           return $mas; // Идем смотреть гет_фром_тейбл
       }
     
    }
  • Trej Gun

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

    Spritz 12 февраля 2010 г. 20:40, спустя 5 минут 12 секунд

    NRG, расскажи им, как надо
  • kamachi

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

    Spritz 12 февраля 2010 г. 20:41, спустя 1 минуту 39 секунд


    Возьмем вот этот класс. Попытаюсь откомментить. Матерые ООПшники поправят если что.

    class userRule
    {
       public $table; //
       public $chto; // Зачем эти переменные в паблике?
       public $chemy; //
       public $name; //
     
       // Читай сначала мои комментарии к методу гет юзер инфо
       public function get_from_table($table,$chto,$chemy) //Должно быть в другом классе.
       {
           $this->table = $table; //
           $this->chto = $chto; // Зачем ты их задаешь? Ты их уже задал, когда гетюзер инфо писал
           $this->chemy = $chemy; //
         
           $sql = mysql_query("SELECT * FROM {$this->table} WHERE {$this->chto}={$this->chemy}"); // Тут правильно вроде
           return $mas = mysql_fetch_array($sql); // И что ты получишь, если к примеру введешь WHERE `usergroup` = 4? При этом у на 15 штук юзеров с этой юзергуппой.
       }
     
     
       public function get_user_info($table,$chto,$chemy)
       {
           $this->table = $table; //
           $this->chto = $chto; // Итак, заебись. Задали переменные, которые нам передали из программы.
           $this->chemy = $chemy; //
         
           $mas = $this->get_from_table($table,$chto,$chemy); // Зачем ты эти переменные передаешь в другую функцию, ты их уже сделал членами класса
           return $mas; // Идем смотреть гет_фром_тейбл
       }
     
    }



    пойдука я еще ману покурю))
  • NRG

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

    Spritz 12 февраля 2010 г. 20:45, спустя 3 минуты 31 секунду

    а я сырну чуток относительно кодстайла (как обычно)   =)

    во-первых: название типа $chto, $kakovaHuya  лучше не делать . называй все аглийским.
    второе: именуй методы нормально, get_from_table() мне ни о чем не говорит. назови его както executeQuery()
    третье: прийми для себя какойто кодинг стандарт. Рекомендую зендовский.
    четвертое: пиши комменты, типа

       /**
        * Retrieve module absolute path by directory type
        *
        * @param string $type
        * @param string $moduleName
        * @return string
        */
       public static function getModuleDir($type, $moduleName)
       {}
  • kamachi

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

    Spritz 12 февраля 2010 г. 20:56, спустя 11 минут 16 секунд

    третье: прийми для себя какойто кодинг стандарт. Рекомендую зендовский - что за зендовский стандарт??
  • NRG

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

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

    Spritz 12 февраля 2010 г. 21:48, спустя 48 минут 40 секунд

    что вообще такое зенд?? Набор готовых классов?
  • Nyaah

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

    Spritz 12 февраля 2010 г. 21:49, спустя 1 минуту 14 секунд

    Бугагага, zend - компания разработчик php
    Work, buy, consume, die

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