The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"как наследовать конструктор perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [ Отслеживать ]

"как наследовать конструктор perl"  
Сообщение от bibi on 05-Янв-09, 13:40 
есть много классов!
как наследовать конструктор perl?


Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "как наследовать конструктор perl"  
Сообщение от bibi on 05-Янв-09, 13:48 
>есть много классов!
>как наследовать конструктор perl?

или точнее: нужно унаследовать констурктор, желательно. И самое главное вызвать (унаследовать) анонимно (чтобы не вызывать их, так как не удобно инициализировать в 10-30 строк 10-30 методов) другие методы с других классов?

через SUPER и can() не получилось

не работает

package sfsd;
use base 'config';

sub new {
# $self->new if $self->can("new");
my $self = shift;
$self = SUPER::new(@_);
  return $self;
}
1;

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "как наследовать конструктор perl"  
Сообщение от angra (ok) on 08-Янв-09, 01:58 
Судя по my $self = shift; вы неверно понимаете особенности конструкторов в перле. Почитайте таки туториал, ЕМНИП там есть часть написанная для полных чайников никогда не слышавших даже про ООП.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "как наследовать конструктор perl"  
Сообщение от bibi on 08-Янв-09, 15:00 
>Судя по my $self = shift; вы неверно понимаете особенности конструкторов в
>перле. Почитайте таки туториал, ЕМНИП там есть часть написанная для полных
>чайников никогда не слышавших даже про ООП.

это я просто так написал пример, я пробовал по разному и этот тоже

я нигде не нашел как унаследовать конструктор... нигде нету

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "как наследовать конструктор perl"  
Сообщение от angra (ok) on 09-Янв-09, 14:40 
Вы не знаете английский или таки лень прочесть man perltooc?

Ну ладно, небольшой демонстрационный пример для понимания простых методов создания и наследования объектов:
#!/usr/bin/perl -w
use strict;
package Parent;
sub new {
  print "Parent::new @_\n";
  my $pkg=shift;
  my $data=shift;
  my $self={parent_data=>$data};
  bless $self,$pkg;
}
sub echo {
  my $self=shift;
  print "$self->{parent_data}\n";
}
package Child;
use base 'Parent';
sub new {
  print "Child::new @_\n";
  my $pkg=shift;
  my ($data_p, $data_c)=@_;
  my $self=$pkg->SUPER::new($data_p);
  $self->{child_data}=$data_c;
  return $self;
}
sub echo {
  my $self=shift;
  print "$self->{child_data}\t";
  $self->SUPER::echo;
}

package Main;
my $a=Parent->new("a_p");
my $b=Child->new("b_p","b_c");
use Data::Dumper;
print Dumper($a,$b);
$a->echo;
$b->echo;

Обратите внимание, что первый параметр конструктора это срока с именем класса, а вот у методов класса первым параметром будет ссылка на объект(экземпляр класса).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "как наследовать конструктор perl"  
Сообщение от bibi on 09-Янв-09, 23:49 
>Вы не знаете английский или таки лень прочесть man perltooc?

иским проблемы есть, про man perltooc раньше никогда не слышал (в книгах и в статьях не видел), знаю есть man perltoot...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "как наследовать конструктор perl"  
Сообщение от bibi on 09-Янв-09, 23:50 
санглийский проблемы есть
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "как наследовать конструктор perl"  
Сообщение от angra (ok) on 10-Янв-09, 13:45 
На русский переведены два хороших учебника по перлу, так называемые lama book(http://en.wikipedia.org/wiki/Learning_Perl) и alpaca book(http://en.wikipedia.org/wiki/Intermediate_Perl). Во второй как раз хорошо описаны ссылки и объекты. Обе книги несложно найти в сети, так что от прямых ссылок воздержусь.

С конструкторами и наследованием разобрались?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "как наследовать конструктор perl"  
Сообщение от bibi on 11-Янв-09, 01:04 
>На русский переведены два хороших учебника по перлу, так называемые lama book(http://en.wikipedia.org/wiki/Learning_Perl)
>и alpaca book(http://en.wikipedia.org/wiki/Intermediate_Perl). Во второй как раз хорошо описаны ссылки и
>объекты. Обе книги несложно найти в сети, так что от прямых
>ссылок воздержусь.
>
>С конструкторами и наследованием разобрались?

первый
package func;

use strict;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
#use HTML::Template;
#use POSIX qw(ceil floor);

sub new {

    my ( $self, %common ) = @_;
    $self = {
        se      => undef,
        session => undef,
        he      => undef,
        p       => undef,
        query   => undef
    };

    $self->{'se'}      = $common{'se'}      if $common{'se'};
    $self->{'session'} = $common{'session'} if $common{'session'};
    $self->{'he'}      = $common{'he'}      if $common{'he'};
    $self->{p}       = $common{p}       if $common{p};
    $self->{query}   = $common{query}   if $common{query};

    # $self->{'passwd'} = $common{'passwd'} if $common{'passwd'};

    if ( $common{passwd} ) {
        $self = &md5crypt( $self, $common{'passwd'} );
    }
    bless $self;
    return $self;
}


второй который пытаюсь сделать, он не хочет работать


package listadmin;

use strict;
use CGI::Carp qw(fatalsToBrowser);
use Data::Validate::Domain qw(is_domain);

use base 'func';

sub new {

#  print "Child::new @_\n";
  # my $self = shift;
#  my ($data_p, $data_c)=@_;
#    my $self = shift;
    my ( %common ) = @_[1];
    
my   $self->SUPER::new(@_[0]);
#  $self->{child_data}=$data_c;
  #return $self;


=sdf
    my ( $self, %common ) = @_;
    $self = {
        se      => undef,
        session => undef,
        he      => undef,
        p       => undef,
        query   => undef
    };

    $self->{se}      = $common{se}      if $common{se};
    $self->{session} = $common{session} if $common{session};
    $self->{he}      = $common{he}      if $common{he};
    $self->{p}       = $common{p}       if $common{p};
    $self->{query}   = $common{query}   if $common{query};
    bless $self;
    $self->dbi_connect if $self->can("dbi_connect");
    return $self;
=cut
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "как наследовать конструктор perl"  
Сообщение от bibi on 11-Янв-09, 01:08 
если даже и работает, то в пакете package listadmin все методы не видны
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "как наследовать конструктор perl"  
Сообщение от bibi on 11-Янв-09, 17:15 
>если даже и работает, то в пакете package listadmin все методы не
>видны

забыл сказать:
в данном случае я явно не правильно написал, но пробовал по разному

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "как наследовать конструктор perl"  
Сообщение от bibi on 13-Янв-09, 23:36 
сделал, что бы работало надо так:

в класе который работает%
    bless $self, $class;


а вот там где наследуем:
    my $self = shift->SUPER::new(@_);

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру