Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать переменную коннекта к БД в класс? чтобы в каждом классе не создавать конне 
:(
    Опции темы
Chuck
Дата 24.7.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: нет
Всего: 9



Добрый день, пожалуйста, подскажите, как правильно передать в класс и пользоваться переменной коннекта?

Есть переменная коннекта
Код

my $dbc = DBI->connect("DBI:mysql:test:localhost:3306", 'root', '');
my $Sections = Sections->new(\$dbc);
$Sections->get_sections(); # добавлено


Есть класс:
Код

package Sections;

sub new {
    my $class = shift;
    my $self = {};
    $self{dbc} = shift;
    bless($self, $class);
    return $self;
}

sub get_sections {
    my $self = shift;
    my $res = $self{dbc}->prepare('SELECT * FROM sections');
    $res->execute();
    while (@section = $res->fetchrow_array()) {
        print $section[0];
    }
}
1;


Но ничего не выводится...


Это сообщение отредактировал(а) Chuck - 24.7.2008, 19:31
PM MAIL WWW GTalk   Вверх
shamber
Дата 24.7.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Во первых в "коде" вы не вызваете get_sections smile

А во вторых Вы передаете ссылку на объект, а пытаетесь использовать сам объект

перепишите так
Код

 my $res = ${$self{dbc}}->prepare('SELECT * FROM sections');

PM MAIL Jabber   Вверх
Chuck
Дата 24.7.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: нет
Всего: 9



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

Сейчас возникла другая проблема:
Код

Can't call method "prepare" on unblessed reference at Sections.pm line 13.


По правде сказать, в ООП для perl-а я не силен и не совсем понимаю назначение функции bless, а тем более такого рода сообщения.

И самое главное - правильный ли я пусть избрал для передачи переменных (ссылок) в объект?


Это сообщение отредактировал(а) Chuck - 24.7.2008, 19:30
PM MAIL WWW GTalk   Вверх
arto
Дата 24.7.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



попробуйте добавить use strict; в начало.
PM MAIL ICQ   Вверх
Chuck
Дата 25.7.2008, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: нет
Всего: 9



Ура, после долгих экспериментов до меня наконец дошло, как нужно работать с ссылками на объекты и с классами.

Выкладываю код:
Код

package Sections;

use strict;
sub new {
    my $class = shift;
    my $self = bless { dbc => ${@_[0]} }, $class;
    return $self;
}

sub get_sections {
    my $self = shift;
    my $res = ${$self}{dbc}->prepare('SELECT * FROM sections');
    $res->execute();
    while (my @section = $res->fetchrow_array()) {
        foreach my $value (@section) {
            print $value . '<br />';
        }
    }
}
1;


Отдельное спасибо shamber и arto.

Кстати, если кто считает, что есть другие пути передачи и обращения к ссылкам, прошу показать кодом.
PM MAIL WWW GTalk   Вверх
KSURi
Дата 25.7.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



кстати можно было не эксперементировать, а почитать документацию:
perldoc perlref
perldoc perlboot


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.