Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2010, 03:57   #1
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию Вызов метода из метода

Понемногу начал изучать Zend Framework и очень понравилось как на нем классы устроены.
Код:
$db->select()->where(array ('id = ?', 2))->orderby('name');
Как вызвать метод из метода я додумался - вернуть объект или ссылку на объект/самого себя (поправьте, если ошибаюсь). Меня интересует как можно узнать, что вызванный метод последний? На пример, в том же Zend, обратиться к базе данных можно как:
Код:
$db->select()->where(array ('id = ?', 2));
так и:
Код:
$db->select('SELECT ... WHERE id = 2');
Как определить, что требуется - вернуть объект или выполнить действие? Буду благодарен за помощь или ссылки на литературу.
kuzjma вне форума Ответить с цитированием
Старый 08.12.2010, 09:58   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Как определить, что требуется - вернуть объект или выполнить действие?
Не понятно в чём собственно вопрос.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 08.12.2010, 21:11   #3
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

mv28jam, я имею в виду, как написать подобный класс (без Zend Framework)? Не во всех проектах требуется Zend, хочу написать для себя небольшой класс для работы с базой данных, но не могу понять
Цитата:
Как определить, что требуется - вернуть объект или выполнить действие?
kuzjma вне форума Ответить с цитированием
Старый 08.12.2010, 21:17   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Если вы имеете в виду то, что функция может что-то возвращать, а может и нет, то обычно это видно по тому, присваивается ли ее результат какой-то переменной, или же она вызывается просто
motorway вне форума Ответить с цитированием
Старый 08.12.2010, 22:39   #5
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

motorway, нет, кажется Вы меня не поняли. Вот я пытаюсь написать класс для работы с базой. По задумке запрос можно выполнить различными способами:
Код:
$db->select('SELECT * FROM `table` WHERE `id`=1');
$db->select()->where(array('id = ?', 1));
$db->select()->where(array('id = ?', 1))->orderby('date');
$db->select()->orderby('date')->where(array('id = ?', 1));
В первом случае все понятно, а в остальных: как узнать, когда требуется продолжить "формировать запрос", а когда следует его выполнить. Мне в голову приходит только добавить еще один метод do(), который будет означать конец цепочки, но это не очень красиво, хочу как в Zend
kuzjma вне форума Ответить с цитированием
Старый 08.12.2010, 22:46   #6
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Обычно есть функция, которая выполняет запрос. Сам запрос передается в виде переменной. Самой функции все равно, как он до этого формировался.
В PHP есть, например, mysql_query. Ей можно передать все, что угодно, но смысл будут иметь не все запросы
motorway вне форума Ответить с цитированием
Старый 09.12.2010, 01:47   #7
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

Или я чего-то не понимаю, или меня ни кто не понимает.
motorway, я знаю КАК выполнить запрос, я не знаю когда его нужно выполнить
Код:
<?php
class mysql {
  function select($query = false) {
    if ($query) {
      return mysql_query($query)
    } else {
      return &$this;
    }
  } // тут все ясно

  function where($array) {
    // Формируем запрос

    return ???; 
    /* Что возвращать (mysql_query или &$this)? Как узнать, будет ли 
     после метода where вызван orderby или нет? Если вызван orderby, 
     значит рано делать запрос, т.к. формирование еще не закончено. 
     Если where последний метод, то нужно делать запрос, но как узнать, 
     последний он или нет? */
  }

  function orderby(...) {
     ...
  }
}

$db = new mysql();
$select_1 = $db->select()->where(array('id = ?' => 1))->orderby('date');
$select_2 = $db->select()->where(array('id = ?' => 1));
kuzjma вне форума Ответить с цитированием
Старый 09.12.2010, 10:31   #8
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Или я чего-то не понимаю, или меня ни кто не понимает.
Наконецто я вас понял!
В ZendFramework конструкция $db->select()->where()->orderby(); возвращает обьект который содержит запрос, а потом уже он выполняется в методах fetchRow или Query.

Добавьте лучше, так как пришло в голову.
Код:
$db->select()->where()->orderby()->do();
Стрелок-охотник

Последний раз редактировалось mv28jam; 09.12.2010 в 10:51.
mv28jam вне форума Ответить с цитированием
Старый 10.12.2010, 02:38   #9
kuzjma
Пользователь Подтвердите свой е-майл
 
Аватар для kuzjma
 
Регистрация: 02.01.2007
Сообщений: 62
По умолчанию

mv28jam, ясно, спасибо за ответ.
kuzjma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм. Как реализовать вызов метода? katbka Общие вопросы C/C++ 12 20.05.2010 22:02
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42
mootools: вызов метода класса в цикле each toXx JavaScript, Ajax 1 18.03.2009 19:20
выход с метода TaTT DoGG Общие вопросы .NET 2 02.03.2009 17:04
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41