За последние 24 часа нас посетили 18073 программиста и 1589 роботов. Сейчас ищут 1069 программистов ...

Польза конструкторы\деструкторы

Тема в разделе "PHP для новичков", создана пользователем +Sten+, 6 дек 2007.

  1. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Потому что, если ты сам не освободишь память, менеджер памяти её высвободит только при завершении работы скрипта :) С деструктором пример не удачный, т.к. он всё равно в конце работы скрипта будет вызван.

    покажи пример.
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  3. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    функция закончила выполняться (переменная не статическая само собой)
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    QQQ
    Очень сомневаюсь. Во всяком случае не GD, иначе бы bugs.php.net завалили сообщениями об "утечках памяти" ;)
     
  5. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Интересно будет услышать вашу критику по поводу следующего класса. Не знаю, как его назвать, но он на основе переданных ему параметров (страницы и количества сообщений на странице), берёт НУЖНУЮ информацию в MySQL и возвращает её, также возвращает массив номеров ВСЕХ страниц. Благодаря полученному массиву страниц, можно делать разчудесные пейджбары :).
    PHP:
    1.  
    2. <?php
    3. <?php
    4. class sql
    5. {
    6. /*
    7.  * Конструктор.  Создаём  подключение, задаём параметры, в случае неудачи
    8.  * останавливаем  сценарий  и выводим ошибку.
    9.  *
    10.  * Параметры:
    11.  * string $host - хост базы данных.
    12.  * string $user - имя пользователя.
    13.  * string $pas  - пароль пользователя.
    14.  * string $db   - имя базы данных.
    15.  * int $page    - текущая страница.
    16.  * int $rows    - количество записей на странице.
    17. */
    18.  function __construct($host = "localhost",
    19.                       $user = "root",
    20.                       $pas = "",
    21.                       $db = "test",
    22.                       $page = 1,
    23.                       $rows = 10)
    24.  {
    25.   $this->link = mysql_connect($host, $user, $pas)
    26.    or die("Connect error: ".mysql_error());
    27.   mysql_select_db($db, $this->link)
    28.    or die("Select database error: ".mysql_error());
    29.   $this->table = $table;
    30.   $this->page = $page-1;
    31.   $this->rows = $rows;
    32.  }
    33.  
    34. //Посылаем запрос. В случае ошибки останавливаем сценарий, выводим ошибку.
    35. //string $query - тот самый запрос.
    36. //Возвращает результат запроса.
    37.  function query($query)
    38.  {
    39.   $this->result = mysql_query($query, $this->link)
    40.    or die("Query error: ".mysql_error());
    41.   return $this->result;
    42.  }
    43.  
    44. //Метод возвращает число строк в текущей таблице.
    45.  function rows()
    46.  {
    47.   $this->query("SELECT COUNT(*) FROM $this->table");
    48.   $counts = mysql_fetch_row($this->result);
    49.   return $counts[0];
    50.  }
    51.  
    52. /*
    53.  * На основе созданных  конструктором  параметров  формируем  запрос,
    54.  * добавляя к переданному в параметре string $query строку LIMIT n,n.
    55.  * После отправляет его.
    56.  * Возвращает массив ассоциативных массивов.
    57.  * Массив с полным списком страниц можно получить, обратившись к sql::pages.
    58. */
    59.  function fetch($query)
    60.  {
    61.   if($query == false) die("Bad query");
    62.   $start = abs($this->page*$this->rows);
    63.   $stop = $start+$this->rows;
    64.   $query .= " LIMIT $start,$this->rows";
    65.   $this->query($query);
    66.   while($row = mysql_fetch_assoc($this->result)) $rows[] = $row;
    67.  
    68.   $Npages = ceil($this->rows()/$this->rows);
    69.   for($i=1; $i<=$Npages; $i++) $pages[] = $i;
    70.   $this->pages = $pages;
    71.  
    72.   return $rows;
    73.  }
    74.  
    75. //Закрывает соединение с базой.
    76.  function __destruct()
    77.  {
    78.   mysql_close($this->link);
    79.  }
    80. }
    81. ?>
    82.  
    Пример использования:
    PHP:
    1.  
    2. <pre>
    3. <?php
    4. include_once("lib/sql.php"); //Подключаем класс
    5.  
    6. $pg = (isset($_GET["pg"])) ? $_GET["pg"]:1; //Инициализируем текущую страницу
    7.  
    8. $sql = new sql("localhost", "root", "", "cms", $pg, 1); //Вызываем класс с нужными нам параметрами
    9. $sql->table = "test"; //Выбираем нужную таблицу
    10. print_r($sql->fetch("SELECT * FROM $sql->table")); //Выводим массив записей страницы.
    11. print_r($sql->pages); //Выводим все страницы
    12. unset($sql);
    13.  
    14.  
    15. /*
    16. Формат возвращаемого массива записей:
    17. Array
    18. (
    19.     [0] => Array
    20.         (
    21.             [name] => Вася
    22.             [email] => [email=vasia@email.gg]vasia@email.gg[/email]
    23.             [home] => vasia.ru
    24.             [mes] => Тестовое сообщение!
    25.         )
    26.     [1] => Array
    27.         (
    28.             [name] => Петя
    29.             [email] => [email=petia@email.gg]petia@email.gg[/email]
    30.             [home] => petia.ru
    31.             [mes] => Второе тестовое сообщение!
    32.         )
    33. )
    34.  
    35. Формат возвращаемого массива страниц:
    36. Array
    37. (
    38.     [0] => 1
    39.     [1] => 2
    40.     [2] => 3
    41. )
    42. После получения массива страниц, foreache'м можно сделать любой
    43. пейджбар
    44. */
    45. ?>
    46.  
    Буду рад любой критике!
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    жуть...
     
  7. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    440Hz
    Знаю... Все когда-то учились).
    А что конкретно плохо? Алгоритм, да? Очень хочу услышать основны ошибки проектирования. Кода не нужно, просто словами. ) В книгах я ничему не научусь, ибо там говорится только о синтаксисе и молчок о правильности и рациональности использования.
     
  8. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Мда. Действительно жуть. А смысл?
    Между прочим, есть книжки, в которых говорица о правильности и рациональности использования и при этом очень мало о синтаксисе. :)
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    http://www.books.ru/shop/books/352130
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ща зарулим...
     
  11. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    RomanBush
    Главы Котерова "PHP5" читаю, и Джона Когзелла "РНР5", в первом ничего непонятно, во втором один синтаксис, но очень доступно.
    Sergey89
    Клас, и всего 206 рублей, закажу.
    440Hz
    ждемс..