Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: офигительная работа с классами. как реализовано??

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Вездеход
Отправлено: 01 Декабря, 2010 - 15:56:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




Для различных сложных выборок из базы используется класс Zend_Db_Select, он предоставляет гибкий функционал для выполнения select запросов. Особенно отмечу объектно-ориентированный подход "покусочного" построения sql-запросов. Например:

PHP:
скопировать код в буфер обмена
  1. <?
  2.       $select = $this->getAdapter()->select()
  3.           ->from('articles')
  4.           ->where("articles.id = ?",$articleId)
  5.           ->join('users', 'users.id = articles.author_id', array('name'))
  6.           ->order('id DESC')
  7.           ->limit(2);
  8. ?>

"Куски" могут располагаться в произвольном порядке, это очень удобно когда у вас запросы строятся динамически.



-------------------------------- -------------------------------- -------------------------------- -----------
это кусок из доков по Zend Framework

(Отредактировано автором: 01 Декабря, 2010 - 15:57:50)



-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
DeepVarvar Супермодератор
Отправлено: 01 Декабря, 2010 - 16:10:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ссылочку что-ли дал бы Закатив глазки
 
 Top
Мелкий Супермодератор
Отправлено: 01 Декабря, 2010 - 17:02:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 617 раз(а)




Вездеход, а в чём проблема? У него разве закрыт исходник?

Очевидно, что есть базовая строка запроса. А методы переопределяют и дополняют эту строку. А потом запрос выполняется.

(Отредактировано автором: 01 Декабря, 2010 - 17:06:58)



-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 01 Декабря, 2010 - 17:13:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




тут как и в mysqli метод возвращает обьект.
этот код можно вот так написать
PHP:
скопировать код в буфер обмена
  1. <?
  2.       $select = $this->getAdapter()->select()
  3.           $select->from('articles')
  4.           $select->where("articles.id = ?",$articleId)
  5.           $select->join('users', 'users.id = articles.author_id', array('name'))
  6.           $select->order('id DESC')
  7.           $select->limit(2);
  8. ?>


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OrmaJever Модератор
Отправлено: 02 Декабря, 2010 - 01:10:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




мне например тожестало интересно как $mysqli->query() возвращает обьект. В итоге накидал такой пример.
PHP:
скопировать код в буфер обмена
  1. class x
  2. {
  3.         var $result;
  4.  
  5.  
  6.         function __construct($result)
  7.         {
  8.                 $this->result = $result;
  9.         }
  10.  
  11.         function fetch_array()
  12.         {
  13.                 return mysql_fetch_array($this->result);
  14.         }
  15.  
  16.         function fetch_object()
  17.         {
  18.                 return mysql_fetch_object($this->result);
  19.         }
  20. }
  21.  
  22. class mysqli
  23. {
  24.         var $mysql = false;
  25.         var $query = false;
  26.  
  27.         function connect($host, $user, $pass, $db)
  28.         {
  29.                 $this->mysql = mysql_connect($host, $user, $pass);
  30.                 mysql_select_db($db, $this->mysql);
  31.         }
  32.  
  33.         function query($sql)
  34.         {
  35.                 $this->query = mysql_query($sql);
  36.                 return new x($this->query);
  37.         }
  38. }
  39. // а использовать как mysqli
  40. $mysqli = new mysqli;
  41. $mysqli->connect('localhost', 'user', 'pass', 'db');
  42. $result = $mysqli->query('SELECT * FROM table');
  43.  
  44. while($x = $result->fetch_object())
  45. {
  46.         echo $x->field.'<br>';
  47. }

можно написать всё в одну строчку и выдет забавно)
PHP:
скопировать код в буфер обмена
  1. echo $mysqli->query('SELECT * FROM table')->fetch_object()->field;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Ch_chov
Отправлено: 02 Декабря, 2010 - 10:57:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




В друпале похожий конструктор запросов:
PHP:
скопировать код в буфер обмена
  1.  $nids = db_select('node', 'n')
  2.       ->fields('n', array('nid', 'created'))
  3.       ->condition('n.promote', 1)
  4.       ->condition('status', 1)
  5.       ->orderBy('n.created', 'DESC')
  6.       ->range(0, variable_get('feed_default_items', 10))
  7.       ->addTag('node_access')
  8.       ->execute()
  9.       ->fetchCol();
 
 Top
JustUserR
Отправлено: 02 Декабря, 2010 - 20:03:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Вездеход пишет:
"Куски" могут располагаться в произвольном порядке, это очень удобно когда у вас запросы строятся динамически
Возможность реализации указанной вами схемы произвольного расположения элементов целевого SQL-запроса с автоматической их расстановкой в требуемой послеодовательности - может быть реализована в любом ООП-языке позволяющем производить передачу текущего экземпляра по ссылке - что обеспечивает возможность соединения набора вложенных вызовов в единую конструкцию для ее последующего разбора


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB