Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Передача переменой из одной функции в другую этого же класса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
PATCH
Отправлено: 31 Декабря, 2011 - 00:57:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class generation_page
  3. {
  4.         public  $start_time;
  5.         public        $start_array;
  6.         public  $end_time;
  7.         public  $end_array;
  8.         public  $time;
  9.        
  10.         public function start ()
  11.         {
  12.            $start_time = microtime();
  13.                 $start_array = explode(" ",$start_time);
  14.                 $start_time = $start_array[1] + $start_array[0];
  15.                 return ($start_time);
  16.         }
  17.         public function ends ($start_time)
  18.         {
  19.                 $end_time = microtime();
  20.                 $end_array = explode(" ",$end_time);
  21.                 $end_time = $end_array[1] + $end_array[0];
  22.                 $time = $end_time - $start_time;
  23.                 printf("Страница сгенерирована за %f секунд",$time);
  24.         }
  25.        
  26. }
  27.  
  28. $generation_start = new  generation_page();
  29. $generation_end = new  generation_page($start_time);
  30. ?>



PHP:
скопировать код в буфер обмена
  1.  
  2. $generation_start->start();
  3. $generation_end->ends($start_time);
  4.  
  5.  


что то вот не получается) или я эт найти ошибку не могу после 5 часов писанины)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  Undefined variable: start_time in
 
 Top
EuGen Администратор
Отправлено: 31 Декабря, 2011 - 01:03:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




$generation_end = new generation_page($start_time);
Змените на
$generation_end = new generation_page($generation_start);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
PATCH
Отправлено: 31 Декабря, 2011 - 01:07:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




полтергейст)

PHP:
скопировать код в буфер обмена
  1. $generation_end = new  generation_page($generation_start);
  2.  
  3. $generation_end->ends($start_time);
  4.  
  5.  


Notice: Undefined variable: start_time in
 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Декабря, 2011 - 02:33:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PATCH, ваша неверно понимать дас ист классэ.
Не нужно никуда свойство (вы его называете "переменная") передавать.
Оно и так уже "везде" есть и глобально внутри родного класса.
Ему даже private можно и даже нужно поставить.
PHP:
скопировать код в буфер обмена
  1. class timer {
  2.  
  3.   /**
  4.    * св-во приватное и недоступно извне класса
  5.    * т.е. echo $timer->stamp; выдаст ошибку
  6.   **/
  7.   private $stamp;
  8.  
  9.   /**
  10.    * в конструкторе
  11.    * который всегда должен быть публичным
  12.    * иначе объект не создасться :)
  13.    * присваиваем св-ву $stamp текущее время
  14.    * с помощью приватного метода getCurrentTime()
  15.   **/
  16.   public function __construct() {
  17.     $this->stamp = $this->getCurrentTime();
  18.     }
  19.  
  20.   /**
  21.    * ну а вот и этот метод, тут все просто
  22.   **/
  23.   private function getCurrentTime() {
  24.     $startstamp = explode(" ",microtime());
  25.     return ($startstamp[1] + $startstamp[0]);
  26.     }
  27.  
  28.   /**
  29.    * а этот публичный метод уже возвращает результат
  30.    * сколько времени работал скрипт
  31.    * узнав текущее время у приватного метода getCurrentTime()
  32.    * и отняв от него запомненное ранее время старта скрипта
  33.   **/
  34.   public function getWorkTime() {
  35.     return ($this->getCurrentTime() - $this->stamp);
  36.     }
  37.  
  38.   }
  39.  
  40. $timer = new timer;
  41. // Что-то делаем, например
  42. for ($i = 0; $i < 1000; $i++) usleep(mt_rand(1,200));
  43.  
  44. echo $timer->getWorkTime();

О как... Надеюсь будет понятно.
(Добавление)
Есть вопросы? Я вобщето их жду )))
 
 Top
PATCH
Отправлено: 31 Декабря, 2011 - 02:53:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




DeepVarvar пишет:
...

спасибо большое , совсем забыл про конструктор ) теории много прочитал а практики мало) про public private protected (вроде) я в курсе) я просто забыл про конструктор и $this ) и пытался передать свойство метода глобально)

(Отредактировано автором: 31 Декабря, 2011 - 02:53:56)

 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Декабря, 2011 - 02:57:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Да ничто не мешает объявить какую нибудь переменную внутри метода класса глобальной.
Но только это ломает всю концепцию.
К тому же она еще и станет глобально-глобальной, т.е. будет искаться не только вне метода, но и вне класса.
Вобщем дрянь тогда получится... Радость
(Добавление)
Ну и правильно закрывать от внешнего мира весь внутренний мир объекта.
Оставлять только API - внешне доступные методы.
(Добавление)
В моем примере это неплохо отражено - доступны только конструктор при создании и метод возвращающий готовое время.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB