Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Замыкание в PHP, мозгошторм / 7 сообщений из 7, страница 1 из 1
16.09.2013, 18:43
    #38398024
fffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
Помогите докумекать

Есть вот такой вот код (часть класса)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    protected $q;

    public function query($query) {
        $this->q=$this->db->query($query);
        return $this->q;
    }

    public function fetch_object() {
        if(!is_object($this->q)) {
            return false;
        }
        return $this->q->fetchObject();
    }




Вот так используется и все работает нормально


Код: php
1.
2.
3.
4.
5.
if($this->db->query("SELECT * FROM `blog`;") {
    while($row = $this->db->fetch_object()) {
        
    }
}



Но если сделать вложенность, то ничего работать не будет

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
if($this->db->query("SELECT * FROM `blog`;") {
    while($row = $this->db->fetch_object()) {
        if($this->db->query("SELECT * FROM `comment`;") {
            while($row_x = $this->db->fetch_object()) {
                
            }
        }
    }
}




Все дело в $this->db->q в которой сохраняется ссылка на обьект

В общем нужно как то применив замыкание сделать $this->q для каждого вызова функции query свою
...
Рейтинг: 0 / 0
16.09.2013, 21:21
    #38398141
sxq
sxq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
вы в рамках одного экземпляра объекта выполняете 2 разных запроса и получаете 2 разных ответа, последний просто перезаписывает первый, поэтому не работает.
...
Рейтинг: 0 / 0
16.09.2013, 22:24
    #38398172
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
Ну так пусть query возвращает ресурс, который потом используется


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
if(($res = $this->db->query("SELECT * FROM `blog`;") !== false) {
    while($row = $res->read_object()) {
        if(($res2 = $this->db->query("SELECT * FROM `comment`;") !== false) {
            while($row_x = $res2->fetch_object()) {
                
            }
        }
    }
}



А вообще такое в цикле делать - бред
...
Рейтинг: 0 / 0
17.09.2013, 00:44
    #38398247
sxq
sxq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
воспользуйтесь расширением PDO, оно есть у всех хостеров, каждый запрос возвращает отдельный независимый экземпляр объекта с записями.
Функции серии mysql_ в PHP версии 5.5 уже считаются устаревшими и в будущих версиях будут исключены.
...
Рейтинг: 0 / 0
18.09.2013, 10:24
    #38399706
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
sxqФункции серии mysql_ в PHP версии 5.5 уже считаются устаревшими и в будущих версиях будут исключены.
Ну это еще Бабушкин надвое сказал...Изменят мнение. Иначе с таким подходом скорее php будет исключен с рынка вебхостинга.
...
Рейтинг: 0 / 0
18.09.2013, 11:09
    #38399807
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
netwindsxqФункции серии mysql_ в PHP версии 5.5 уже считаются устаревшими и в будущих версиях будут исключены.
Ну это еще Бабушкин надвое сказал...Изменят мнение. Иначе с таким подходом скорее php будет исключен с рынка вебхостинга.

Надеюсь речь не о том Бабушкине, который флешку к маркеру примотал
Пхп вперед загнется, если в нем будут оставлять то, с помощью чего можно поговнокодить.
...
Рейтинг: 0 / 0
18.09.2013, 12:24
    #38399961
seejil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замыкание в PHP, мозгошторм
fffffffffffff,

Делайте clone. К примеру,
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if($this->db->query("SELECT * FROM `blog`;") {
    while($row = $this->db->fetch_object()) {
        $db = clone $this->db;
        if($db->query("SELECT * FROM `comment`;") {
            while($row_x =  $db->fetch_object()) {
                
            }
        }
    }
}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Замыкание в PHP, мозгошторм / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]