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]   

> Без описания
Rooner
Отправлено: 14 Апреля, 2012 - 08:17:15
Post Id


Посетитель


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


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




В самом начале каждой страницы сайта стоит авторизация пользователя $auth = new Auth(); В переменной $auth->user хранятся все данные о пользователе.
Каждая страница сайта это отдельный класс, в котором могут быть еще и дочерние классы. Проблема в том, что создав объект $auth вне классов я не могу обратиться к нему внутри класса страницы:

PHP:
скопировать код в буфер обмена
  1. $auth = new Auth();
  2. class Materials {
  3.   function __construct($title = "") {
  4.     echo $auth->user["status"]; // нет доступа
  5.   }
  6. }
  7. $page = new Materials("Материалы");
 
 Top
etoYA
Отправлено: 14 Апреля, 2012 - 09:17:37
Post Id



Участник


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


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




Rooner пишет:
// нет доступа

Свойство $user публичное?

Попробуйте


Rooner пишет:
Каждая страница сайта это отдельный класс

И смысл так извращатся? А если страниц 100?

Делаете класс, а в нём методы....
 
 Top
Rooner
Отправлено: 14 Апреля, 2012 - 10:02:41
Post Id


Посетитель


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


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




etoYA свойство $user публичное.
PHP:
скопировать код в буфер обмена
  1.     class Auth {
  2.      
  3.       public $user;
  4.      
  5.       function __construct() {
  6.         $this->user = "пользователь";
  7.       }
  8.     }
  9.     $auth = new Auth();
  10.    
  11.     echo $auth->user; // выводит пользователь
  12.    
  13.     class Materials {
  14.       function __construct() {
  15.         echo $auth->user; // ничего не выводит
  16.       }
  17.     }
  18.     $page = new Materials();


Ну как получить доступ к $auth->user; внутри класса?

etoYA пишет:
И смысл так извращатся? А если страниц 100?

Нуда, возможно извращение, но с другой стороны удобно сохранять данные в переменные класса, когда без использования класса их пришлось бы либо передавать в функции либо делать глобальными. Но это уже не по теме...
(Добавление)
Сделал с помощью статической переменной $user.
PHP:
скопировать код в буфер обмена
  1.     class Auth {
  2.       static $user;
  3.       function __construct() {
  4.         Auth::$user = "пользователь";
  5.       }
  6.     }
  7.     $auth = new Auth();
  8.    
  9.     echo "Global = ".Auth::$user."<br>"; // выводит пользователь
  10.    
  11.     class Materials {
  12.       protected $obj;
  13.       function __construct() {
  14.         echo "Materials = ".Auth::$user."<br>";
  15.         $this->obj = new Catalog;
  16.       }
  17.     }
  18.    
  19.     class Catalog {
  20.       function __construct() {
  21.         echo "Catalog = ".Auth::$user."<br>";
  22.       }
  23.     }
  24.    
  25.     $page = new Materials();
 
 Top
Bio man
Отправлено: 14 Апреля, 2012 - 11:31:09
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




можно было просто передать объект в конструктор или агрегировать в нужном методе....
 
 Top
Rooner
Отправлено: 14 Апреля, 2012 - 12:42:18
Post Id


Посетитель


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


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




Bio man, к сожалению это слишком громоздко, даже если передавать указатель на объект, т.к. к переменной, с данными о пользователе, мне нужно обращаться во многих местах как в классах(в родительском, в дочерних) так и на самой странице(и на подключенных других страницах).
Вобщем в моем случае оптимальный выход это статическая переменная.
 
 Top
snikers987
Отправлено: 14 Апреля, 2012 - 14:58:44
Post Id



Участник


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


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




Может класс Auth сделать сиглтоном?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class Auth {
  4.     public $user;
  5.     private static $__instanse = null;
  6.     private function __construct() {
  7.         $this->user = "пользователь";
  8.     }
  9.         private function __sleep(){}
  10.         private function __wakeup(){}
  11.         private function __clone(){}
  12.         static function getInstanse(){
  13.                 if(self::$__instanse !== null){
  14.                         return self::$__instanse;
  15.                 }else{
  16.                         return self::$__instanse = new Auth;
  17.                 }
  18.         }
  19. }
  20.    
  21.    
  22. class Materials {
  23.         public function __construct() {
  24.                 echo Auth::getInstanse()->user; // ничего не выводит
  25.         }
  26. }
  27. $page = new Materials();


я конечно могу ошибаться.
[/PHP]

(Отредактировано автором: 14 Апреля, 2012 - 15:01:13)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
DelphinPRO
Отправлено: 14 Апреля, 2012 - 15:06:23
Post Id



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


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


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




snikers987 пишет:
Может класс Auth сделать сиглтоном?

конечно. если $auth по сути должна быть глобальной переменной, делайте класс синглтоном.


-----
Чем больше узнаю, тем больше я не знаю.
 
 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