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]   

> Без описания
Иван14
Отправлено: 19 Октября, 2011 - 04:23:54
Post Id



Гость


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


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




здраствуйте!
столкнулся со след проблемкой, есть код:

PHP:
скопировать код в буфер обмена
  1. Class BROTHER{
  2.  
  3. protected $a = array();
  4. protected $b;
  5.  
  6. function BROTHER{
  7. $this->POST();
  8. }
  9. public function MODULE(){
  10.    echo $this->b;
  11. }
  12. protected function POST(){
  13. if(isset($_POST['id']) && isset($_POST['title'])){
  14. $this->a = array('id'=>$_POST['id'], 'title'=>$_POST['title'])
  15. $this->b = $this->a['id'];
  16.    }
  17. }
  18.  
  19. }


функция-конструктор BROTHER вызывается каждый раз,но в массиве $_POST не всегда есть записи! но когда у меня страница подгружается первый раз в нём есть значения.. далее я перехожу по ссылке и использую тот же самый класс..
вопрос, можно ли мне как-нибудь зафиксировать переменную $_POST['id'] таким образом, чтобы значение её всегда оставалось в классе! присвоить его(значение) какой-нибудь переменной или ещё как???

P.S. при моём коде значение пропадает в силу того, что в классе по-новому создаётся переменная protecte $b; следовательно все её старые значения пропадают. а мне они нужны. (<?$this->MODULE();?> я вызываю в отдельном файле)

если кто-то понял мою цель - подскажите пжлст!

(Отредактировано автором: 19 Октября, 2011 - 04:26:58)

 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Октября, 2011 - 05:25:57
Post Id



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


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


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




Иван14 пишет:
если кто-то понял мою цель
от тут то самая соль... Радость
Осмелюсь предложить: куки, сессии???
Можт только в момент "жизни" скрипта? Тогда: константа?
 
 Top
Иван14
Отправлено: 19 Октября, 2011 - 05:31:18
Post Id



Гость


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


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




DeepVarvar,
вообще сессии, вообще много классов и файлов, ну у меня ей богу нет времени всё подробно описывать.
я лучше попробую переформулирую вопрос:

нельзя ли в функции класса, которая не используется в данный момент на страничке, создать переменную, которая будет хранить значение вот этой ПОСТовской, И, когда я захочу её оттуда получить, просто обращаюсь к ней как к переменной функции.. как только это сделать? )
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Октября, 2011 - 05:35:00
Post Id



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


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


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




Нет, нельзя.
 
 Top
Иван14
Отправлено: 19 Октября, 2011 - 05:37:07
Post Id



Гость


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


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




спасибо! ;) искренне, серьезно.
теперь буду думать как сделать дальше...
 
 Top
Stierus Супермодератор
Отправлено: 19 Октября, 2011 - 08:53:23
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




PHP:
скопировать код в буфер обмена
  1.     Class BROTHER{
  2.      
  3.     protected $a = array();
  4.     protected $b;
  5.      
  6.     function BROTHER{
  7.     $this->POST();
  8.     }
  9.     public function MODULE(){
  10.        echo $this->b;
  11.     }
  12.     protected function POST(){
  13.     if(isset($_POST['id']) && isset($_POST['title'])){
  14.     $this->a = array('id'=>$_POST['id'], 'title'=>$_POST['title'])
  15.     $this->b = $this->a['id'];
  16.        }
  17.     }
  18.      
  19.     }


Пример того, как не надо писать классы. По идее он должен выглядеть как-то так:

PHP:
скопировать код в буфер обмена
  1. interface DaoInterface{
  2.         /**
  3.          * @abstract
  4.          * @param string $paramName
  5.          * @return mixed
  6.          */
  7.         public function get($paramName);
  8.        
  9.         /**
  10.          * @abstract
  11.          * @param string $paramName
  12.          * @param mixed $paramValue
  13.          * @return void
  14.          */
  15.         public function set($paramName, $paramValue);
  16.        
  17.         /**
  18.          * @abstract
  19.          * @param string $paramName
  20.          * @return bool
  21.          */
  22.         public function exists($paramName);
  23. }
  24.  
  25. Class BROTHER{
  26.      
  27.     protected $a = array();
  28.     protected $b;
  29.      
  30.     function __construct(DaoInterface $dao){
  31.         $this->a = array('id'=>$dao->get('id'), 'title'=>$dao->get('title'));
  32.                 $this->b = $dao->get('id');
  33.     }
  34.  
  35.     public function MODULE(){
  36.        return $this->b;
  37.     }
  38. }


Внутри классов нельзя использовать суперглобальные массивы (пост) и нельзя делать echo - только return. Соответственно В моем варианте у вас должно быть еще 2 класса: PostDao и SessionDao (ну или там DbDao - где вы будете хранить промежуточные данные). И перед созданием экземпляра BROTHER, вы смотрите, есть ли в PostDao id и title, если есть - то в коструктор BROTHER отправляете экземпляр PostDao, иначе - экземпляр SessionDao
(Добавление)
Это упрощенная схема, тут остаются неясности с
PHP:
скопировать код в буфер обмена
  1. $this->a = array('id'=>$dao->get('id'), 'title'=>$dao->get('title'));
  2. $this->b = $dao->get('id');
. Совсем уж по хорошему - у вас должен быть объект-структура, в котором точно есть нужная информация с геттерами и сеттерами. Но для начала, если вы переведете хотя бы на такого плана классы - уже будет хорошо.
 
My status
 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