Forum Webscript.Ru

Программирование => Perl => Тема начата: dymka от 20 Августа 2002, 21:00:00

Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: dymka от 20 Августа 2002, 21:00:00
Как реализовать сабж?
Вообщем-то нужно сделать приватные переменные и методы класса.
По простому вроде нельзя(?), но как можно проще извратиться???
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: NeoNox от 20 Августа 2002, 21:08:51
Пример-то приведи. Что нужно и что не получается.
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: dymka от 20 Августа 2002, 22:31:31
Файл MyModule.pm


package MyModule;

sub new
{
#  body of constructor
};

sub _private_method
{
# body of private method
};



дальше у себя в скрипте...


use MyModule;
$instance = MyModule->new;
$instance->_private_method; # вот хочу чтоб так нельзя было делать... он должен быть скрыт.


Ну как в C++, Object-Pascal. Есть три типа доступа к данным класса: скрытые поля, защищенные и открытые.
мнеб хотяб скрытые сделать, а то все методы доступны.
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: Unregistered от 20 Августа 2002, 23:31:37

{
my $ss=sub {print @_; \'\';};

}
print $ss->(uuu);




{
 $ss=sub {print @_; \'\';};
}
print $ss->(uuu);




Хотя я нифига не понимаю в ООП Perl да и вообще

package MyModule;
sub new { # body of constructor };
my $priv=sub  { # body of private method };
sub use_priv {
$priv->(uuu);
}
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: Unregistered от 20 Августа 2002, 23:33:44
ой ну это перл естественно а не пхп
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: ююю от 20 Августа 2002, 23:55:59
package Cal;
sub new{
   my $self={};
   bless($self);
   return $self;
}

my $ss=sub {$_[0]+$_[1]};

sub priv {
   shift;
   $ss->(@_);
}

1;

____________________________________________________

use Cal;
$obj=Cal->new();
print $obj->priv(1, 3);
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: dymka от 21 Августа 2002, 07:12:03
Ясно... то бишь процедуру хранить не явно, а в виде указателя, который является переменной модуля...
Слыхал что в 6-ой версии с поддержкой ООП будет получше... ждемс стабл...
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: ююю от 21 Августа 2002, 12:17:01
>>то бишь процедуру хранить не явно, а в виде указателя, >>который является переменной модуля


Могу добавить ЛОКАЛЬНОЙ переменной модуля(my)

my $ss

Хотя насколько ДОПУСТИМ такой \'метод\' создания приватных методов судить СПЕЦАМ
Название: Скрытые (private) поля и методы модуля(класса)
Отправлено: dymka от 21 Августа 2002, 16:25:42
Ну не слишком изящно, но меня такой путь вполне устраивает... :)