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
Форумы портала PHP.SU :: Версия для печати :: Почему при повторном вызове функции обнуляется свойство объекта
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Почему при повторном вызове функции обнуляется свойство объекта

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

1. imedia - 28 Февраля, 2017 - 17:02:27 - перейти к сообщению
Вот у меня вызов приватной функции он многократен в зависимости от действий пользователя

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 он приращается, это же свойство почему оно обнуляется? Может потому что к класу обращение заново происходит, что же делать? каким образом установить этот глобальный итератор
2. Строитель - 28 Февраля, 2017 - 17:21:11 - перейти к сообщению
imedia пишет:
почему при повторном входе в privat kind() $this->num снова null ?
Объявите это свойство статическим privat static $num;
3. Fart - 28 Февраля, 2017 - 17:54:21 - перейти к сообщению
кажется речь о privatE ? а не privat


если установить: private $num = 0;
то по умолчанию всегда будет иметь значение 0, если по какой то причине не было присвоено ей новое.
4. imedia - 28 Февраля, 2017 - 18:58:57 - перейти к сообщению
Строитель
Не работает, думаю сессии надо использовать при старте класса статическое свойство тоже обнуляется
5. Строитель - 28 Февраля, 2017 - 19:10:39 - перейти к сообщению
imedia пишет:
Строитель
Не работает, думаю сессии надо использовать при старте класса статическое свойство тоже обнуляется
Ну, ещё можно прописать это свойство внутри метода kind(), и так же объявить его (вернее её, т.к. это будет уже переменная) статической. И тогда при каждом вызове метода её значение будет увеличиваться. Можно конечно и в сессии, но надо ли?
6. imedia - 28 Февраля, 2017 - 19:19:19 - перейти к сообщению
Строитель
Сессии не желательно, дело в том что класс загружается каждый раз когда принимается запись о фотографии а это многократно - аяксом и этот класс обработчик, будет разве не обнавляется статистическая переменная при новой загрузке класса обработчика?
7. Строитель - 28 Февраля, 2017 - 19:27:04 - перейти к сообщению
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.
8. Sail - 01 Марта, 2017 - 08:43:22 - перейти к сообщению
imedia пишет:
вызов приватной функции он многократен в зависимости от действий пользователя

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

Похоже, что нет.

 

Powered by ExBB FM 1.0 RC1