Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Serg Chervjakov                      2:5020/400     11 Jun 2003  00:34:28
 To : All
 Subject : Зачем так получается?
 -------------------------------------------------------------------------------- 
 
 Hi All,
 
 Пишу класс, условно prob.pm:
 
 ----- prob.pm -----
 package prob;
 
 sub new
 {
  my $class=@_;
  my $object={};
  bless($object,$class);
  return $object;
 }
 
 sub ph
 {
  print 'ok' if ($alr!=1);
  $alr=1;
 }
 
 1;
 --------
 
 А теперь юзаю его:
 ----
 use prob;
 $obj=prob->new();
 
 $obj->ph;
 $obj->ph;
 
 ----
 
 'ok' принтится лишь один раз. Это понятно - глобальные переменные сохраняют
 свое значение (тут это $alr). Так и должно быть (причем эти глобальные
 переменные, как и полагается, видны лишь в пределах класса). Hо вот облом
 наступает когда делается так:
 
 ----
 use prob;
 $obj=prob->new();
 
 $obj->ph;
 
 $obj1=prob->new();
 
 $obj1->ph;
 
 ----
 
 'ok' опять принтится лишь 1 раз. Hо вот почему? Ведь $obj и $obj1 по идее не
 должны быть связаны между собой - они независимые друг от друга экземпляры
 класса. А они связаны по рукам и ногам. Мораль - как бы то нибыло, но лучше
 глобальных переменных не юзать... чревато это...
  От этого можно как-нибудь избавиться? Кста, а почему так получается?
 
 Сорри, что немного громоздко, хотя вроде и создавались наипростейшие
 примеры...
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Зачем так получается?   Serg Chervjakov   11 Jun 2003 00:34:28 
 Зачем так получается?   P4elovod Planety   20 Jun 2003 23:00:45 
Архивное /ru.perl/16679948b5852.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional