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
Форумы портала PHP.SU :: Версия для печати :: офигительная работа с классами. как реализовано??
Форумы портала PHP.SU » » Объектно-ориентированное программирование » офигительная работа с классами. как реализовано??

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

1. Вездеход - 01 Декабря, 2010 - 15:56:29 - перейти к сообщению
Для различных сложных выборок из базы используется класс 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
2. DeepVarvar - 01 Декабря, 2010 - 16:10:29 - перейти к сообщению
Ссылочку что-ли дал бы Закатив глазки
3. Мелкий - 01 Декабря, 2010 - 17:02:59 - перейти к сообщению
Вездеход, а в чём проблема? У него разве закрыт исходник?

Очевидно, что есть базовая строка запроса. А методы переопределяют и дополняют эту строку. А потом запрос выполняется.
4. OrmaJever - 01 Декабря, 2010 - 17:13:51 - перейти к сообщению
тут как и в 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. ?>
5. OrmaJever - 02 Декабря, 2010 - 01:10:57 - перейти к сообщению
мне например тожестало интересно как $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;
6. Ch_chov - 02 Декабря, 2010 - 10:57:52 - перейти к сообщению
В друпале похожий конструктор запросов:
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();
7. JustUserR - 02 Декабря, 2010 - 20:03:38 - перейти к сообщению
Вездеход пишет:
"Куски" могут располагаться в произвольном порядке, это очень удобно когда у вас запросы строятся динамически
Возможность реализации указанной вами схемы произвольного расположения элементов целевого SQL-запроса с автоматической их расстановкой в требуемой послеодовательности - может быть реализована в любом ООП-языке позволяющем производить передачу текущего экземпляра по ссылке - что обеспечивает возможность соединения набора вложенных вызовов в единую конструкцию для ее последующего разбора

 

Powered by ExBB FM 1.0 RC1