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. Иван14 - 19 Октября, 2011 - 04:23:54 - перейти к сообщению
здраствуйте!
столкнулся со след проблемкой, есть код:

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();?> я вызываю в отдельном файле)

если кто-то понял мою цель - подскажите пжлст!
2. DeepVarvar - 19 Октября, 2011 - 05:25:57 - перейти к сообщению
Иван14 пишет:
если кто-то понял мою цель
от тут то самая соль... Радость
Осмелюсь предложить: куки, сессии???
Можт только в момент "жизни" скрипта? Тогда: константа?
3. Иван14 - 19 Октября, 2011 - 05:31:18 - перейти к сообщению
DeepVarvar,
вообще сессии, вообще много классов и файлов, ну у меня ей богу нет времени всё подробно описывать.
я лучше попробую переформулирую вопрос:

нельзя ли в функции класса, которая не используется в данный момент на страничке, создать переменную, которая будет хранить значение вот этой ПОСТовской, И, когда я захочу её оттуда получить, просто обращаюсь к ней как к переменной функции.. как только это сделать? )
4. DeepVarvar - 19 Октября, 2011 - 05:35:00 - перейти к сообщению
Нет, нельзя.
5. Иван14 - 19 Октября, 2011 - 05:37:07 - перейти к сообщению
спасибо! ;) искренне, серьезно.
теперь буду думать как сделать дальше...
6. Stierus - 19 Октября, 2011 - 08:53:23 - перейти к сообщению
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');
. Совсем уж по хорошему - у вас должен быть объект-структура, в котором точно есть нужная информация с геттерами и сеттерами. Но для начала, если вы переведете хотя бы на такого плана классы - уже будет хорошо.

 

Powered by ExBB FM 1.0 RC1