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

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

  • Nyaah

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

    Spritz Фев. 11, 2010, 6: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, 10:26 п.п., спустя 4 часа 13 минут 10 секунд

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


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

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

    Spritz Фев. 12, 2010, 8: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, 8: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, 8:18 п.п., спустя 23 часа 59 минут 58 секунд

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

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

    Spritz Фев. 12, 2010, 8: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, 8:22 п.п., спустя 47 секунд

    NRG ,да хз….

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

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

    Spritz Фев. 12, 2010, 8: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, 8:40 п.п., спустя 5 минут 12 секунд

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

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

    Spritz Фев. 12, 2010, 8: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, 8: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, 8:56 п.п., спустя 11 минут 16 секунд

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

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

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

    Spritz Фев. 12, 2010, 9:48 п.п., спустя 48 минут 40 секунд

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

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

    Spritz Фев. 12, 2010, 9:49 п.п., спустя 1 минуту 14 секунд

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

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