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]   

> Без описания
imedia
Отправлено: 28 Февраля, 2017 - 17:02:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Вот у меня вызов приватной функции он многократен в зависимости от действий пользователя

PHP:
скопировать код в буфер обмена
  1.  
  2. class A{
  3. privat $num;
  4.  
  5. public function index(){
  6. move_uploaded_file($tmp_name,$upload );
  7. $this->resize_($upload,$uploads_dir,$file_name,'file_name');
  8. }
  9. public function resize_(){
  10. //здесь в цикле ресайз затем запись в сессию $this->kind
  11. $this->kind($process,$imag=$up['name'].$file_name);
  12. }
  13. privat function kind(){
  14. for($i=0;$i<1;$i++) {
  15. dump('ENTER FOR');
  16. dump($this->num);/////////////////////////////////////////////////////////////
  17. dump(session()->all());
  18. if (session()->has($process . '.' . $this->num . '.image_medium')) {
  19.  session()->put($process . '.' . $this->num . '.image_large', $imag);
  20. //когда уже должен быть 1 в $this->num то large переписывается потому что в $this->num null
  21. //before = null
  22. $this->num++;
  23. //after =1
  24. break;
  25. }
  26. if (session()->has($process . '.' . $this->num . '.image_small')) {
  27. session()->put($process . '.' . $this->num . '.image_medium', $imag);
  28.  break;
  29. } else {
  30.  session([$process . '.' . $this->num . '.image_small' => $imag]);
  31. break;
  32. }
  33. }
  34. dump('EXIT FOR');
  35. dump($this->num);//здесь $this->num 1///////////////////////////////////////////////
  36. dump(session()->all());
  37. }
  38. }
  39.  
  40.  
  41.  

почему при повторном входе в privat kind() $this->num снова null ?? когда в строке 22 он приращается, это же свойство почему оно обнуляется? Может потому что к класу обращение заново происходит, что же делать? каким образом установить этот глобальный итератор

(Отредактировано автором: 28 Февраля, 2017 - 17:14:13)

 
 Top
Строитель
Отправлено: 28 Февраля, 2017 - 17:21:11
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




imedia пишет:
почему при повторном входе в privat kind() $this->num снова null ?
Объявите это свойство статическим privat static $num;

(Отредактировано автором: 28 Февраля, 2017 - 17:22:11)

 
 Top
Fart
Отправлено: 28 Февраля, 2017 - 17:54:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


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




кажется речь о privatE ? а не privat


если установить: private $num = 0;
то по умолчанию всегда будет иметь значение 0, если по какой то причине не было присвоено ей новое.

(Отредактировано автором: 28 Февраля, 2017 - 17:59:46)

 
 Top
imedia
Отправлено: 28 Февраля, 2017 - 18:58:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Строитель
Не работает, думаю сессии надо использовать при старте класса статическое свойство тоже обнуляется
 
 Top
Строитель
Отправлено: 28 Февраля, 2017 - 19:10:39
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




imedia пишет:
Строитель
Не работает, думаю сессии надо использовать при старте класса статическое свойство тоже обнуляется
Ну, ещё можно прописать это свойство внутри метода kind(), и так же объявить его (вернее её, т.к. это будет уже переменная) статической. И тогда при каждом вызове метода её значение будет увеличиваться. Можно конечно и в сессии, но надо ли?

(Отредактировано автором: 28 Февраля, 2017 - 19:11:53)

 
 Top
imedia
Отправлено: 28 Февраля, 2017 - 19:19:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Строитель
Сессии не желательно, дело в том что класс загружается каждый раз когда принимается запись о фотографии а это многократно - аяксом и этот класс обработчик, будет разве не обнавляется статистическая переменная при новой загрузке класса обработчика?
 
 Top
Строитель
Отправлено: 28 Февраля, 2017 - 19:27:04
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




imedia, набросал пример
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class A
  4. {
  5.     private $num;
  6.    
  7.     private function kind() {
  8.         static $numb;
  9.         $this->num = ++$numb;
  10.        
  11.         return $this->num;
  12.     }
  13.    
  14.     public function getNum() {
  15.         return $this->kind();
  16.     }
  17. }
  18.  
  19. echo (new A)->getNum();
  20. echo (new A)->getNum();
  21. echo (new A)->getNum();

(Добавление)
Вывод : 1 2 3.

(Отредактировано автором: 28 Февраля, 2017 - 19:36:44)

 
 Top
Sail
Отправлено: 01 Марта, 2017 - 08:43:22
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


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




imedia пишет:
вызов приватной функции он многократен в зависимости от действий пользователя

На всякий случай спрошу: "Неоднократный вызов выполняется в пределах одного соединения (запроса от браузера клиента)?
(Добавление)
imedia пишет:
когда принимается запись о фотографии а это многократно - аяксом

Похоже, что нет.
 
 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