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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование метода из другого класса, проблема 
:(
    Опции темы
Vavilen
  Дата 15.10.2011, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Запутался я в ООП. Прошу помочь!

Есть Core.pm
Там производится подключение к БД MySQL.
Код

package Core;

use strict;
use warnings;
use DBI;
use DBD::mysql;

use lib ('/home/orbital/Pitch/lib');

my $database = "DB";
my $hostname = "127.0.0.1";
my $port = "3306";
my $user = "root";
my $password = "mysql";
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";


sub new { 
        my $class = shift;
        my $self = {};
        bless $self, $class;
        $self->{dbh} = DBI->connect($dsn,$user,$password, {RaiseError => 1,AutoCommit => 0}) or die $DBI::errstr;
      my $session = Core::Session->new();
        my $user = Core::User->new();
        return ($self , $session , $user);
};
1;

Есть Core::Session
Там ведется работа с сессией пользователя. Привел несколько методов. Их гораздо больше.
Код

use strict;
use warnings;
use lib ('/home/orbital/Pitch/lib');

package Core::Session;


use CGI::Cookie;

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

sub load_session {
    my $self = shift;
    my $session_id =_cookie();
    my $data_handler = $self->{dbh}->prepare("SELECT * FROM session WHERE session_id=?");
    $session_id ? $data_handler->execute($session_id) : return 0;
    my $loaded_session=$data_handler->fetchrow_hashref;
    return $loaded_session;
}#//sub load_session

sub save_session {
    my $self= shift;
    my $args;
    @_ ? $args=@_ :  $args='0';
    my $generate_session_id= generate_id();
                            #$self->session_id({});
                            $self->_session($generate_session_id);
                            my $new_session= $var->{dbh}->prepare("INSERT INTO session (session_id, data) VALUES (?,?)");
                            $new_session->execute ($generate_session_id, $args);
                            return $generate_session_id;
}


Есть Core::User
В этом пакете ведется работа с учетной записью пользователя. Привел несколько методов. Их гораздо больше.
Код

use strict;
use warnings;
use lib ('/home/orbital/Pitch/lib');

package Core::User;



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

sub create_user { # создание нового пользователя
    my $self= shift;
    my $params= shift; # все данные о пользователе передаются в виде ссылки на хэш, который заполняется введенными значениями в HTML странице (param)
    my $add_row= $self->{dbh}->prepare ("INSERT INTO users (login,  password,   email,  user_profile) VALUES (?,?,?,?) ");
    $add_row->execute ($params->{login}, $params->{password}, $params->{email}, $params->{user_profile});
    my $get_user_id= $self->{dbh}->{mysql_insertid}; # запрашиваем id только что созданного пользователя
    return $get_user_id;
}#// sub create_user


sub do_login { # метод осуществляет вход пользователя   
    my $self= shift;
    # следующий входной параметр (ссылка на хэш) содержит логин и пароль, введенные польлзователем в форме "авторизация"
    my $login_from_html     =    $_[0]  ->  {login};
    my $password_from_html  =    $_[0]  ->  {password};
    my $check_login_password_handler    =   $self   ->  {dbh} ->  prepare("SELECT id, login,  password,   group   FROM users WHERE login=? AND password=?");
    $check_login_password_handler   ->  execute($login_from_html,   $password_from_html);
    my $user_info_row  =   $check_login_password_handler->fetchrow_hashref;
    
    if ($user_info_row)    { # пользователь с такими login, password найден
        my $get_session = $self->load($user_info_row); # получаем данные о сессии пользователя
        my $set_cookie  =   $self->set_cookie($get_session); # формируем cookie
        return $set_cookie;
    }
    else {
        return 0;
    }
    } #// sub login


Подскажите, пожалуйста, как сделать, чтобы были доступны некоторые методы из Core::Session в Core::User, и наоборот!
PM MAIL   Вверх
Pfailed
Дата 15.10.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 22
Всего: 39



Вынести эти методы в отдельный класс, возможно Core,  и наследоваться от него в них.

Это сообщение отредактировал(а) Pfailed - 15.10.2011, 21:05


--------------------
PM MAIL   Вверх
KSURi
Дата 15.10.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Или читайте про композицию, как альтернативу наследованию.


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


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

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


 




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


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

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