За последние 24 часа нас посетили 17315 программистов и 1740 роботов. Сейчас ищут 1059 программистов ...

Не могу понять как использовать класс из учебника

Тема в разделе "PHP для новичков", создана пользователем timur2008, 24 янв 2017.

  1. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    Добрый вечер. Пытаюсь делать по учебнику класс для работы с сессиями но не могу понять как его использовать , подскажите пожалуйста ??
    Вот сам код
    PHP:
    1. abstract class Registry {
    2.     abstract protected function get($key);
    3.     abstract protected function set($key,$value);
    4. }
    5.  
    6.  
    7. class SessionRegistry extends Registry{
    8.     private static $instance;
    9.     private function __construct() {
    10.         session_start();
    11.     }
    12.  
    13.     static function instance()
    14.     {
    15.         if(!isset(self::$instance))
    16.         {
    17.             self::$instance = new self();
    18.         }
    19.         return self::$instance;
    20.     }
    21.     protected function get($key) {
    22.         if(isset($_SESSION[__CLASS__][$key]))
    23.         {
    24.             return $_SESSION[__CLASS__][$key];
    25.         }
    26.     }
    27.  
    28.     protected function set($key, $value) {
    29.         $_SESSION[__CLASS__][$key]=$value;
    30.     }
    31.  
    32.     function setComplex(Complex $complex) {
    33.         self::instance()->set('complex',$complex);
    34.     }
    35.  
    36.     function getComplex() {
    37.         return self::instance()->get('complex');
    38.     }
    39. }
    А именно того что там такое класс Complex ? Это класс в котором хранятся данные сессии чтоли ?? и зачем тогда метод Set нужен ? Просто что такое класс Complex там почему то не написано Оо
     
    #1 timur2008, 24 янв 2017
    Последнее редактирование: 24 янв 2017
  2. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    аа да метод сет приватный ... хмм тогда получается что класс Complex это какая то структура которая передается в сессию ?
     
  3. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Автор скорее всего описывает не что то конкретное,а с некоторым уровнем абстракции. Под Complex он вероятнее всего подразумевает просто какой либо сложный объект,например setUser(User $user) и тд.
     
  4. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    Блин не получается ничего :( Делаю так Создал свой класс Complex
    PHP:
    1. class Complex {
    2.     protected $userId;
    3.     protected $fio;
    4.     function getUserId()
    5.     {
    6.         return $this->userId;
    7.     }
    8.    
    9.     function setUserId($id) {
    10.         $this->userId = $id;
    11.     }
    12.     function getLogin()
    13.     {
    14.         return $this->userId;
    15.     }
    16.     function setLogin($fio) {
    17.         $this->fio = $fio;
    18.     }
    19. }
    дальше создаю экземпляр этого класса и пытаюсь запихать его в SessionRegistry
    $sessionReg = SessionRegistry::instance();
    $complex = new Complex();
    $complex->setLogin($login);
    $sessionReg->setComplex($complex);
    Дальше пытаюсь вытащить оттуда логин
    PHP:
    1. require_once '/regestries/RequestRegistry.php';
    2. require_once '/regestries/SessionRegistry.php';
    3. class ViewHelper {
    4.     static function getRequest()
    5.     {
    6.         return RequestRegistry::getRequest();
    7.     }
    8.    
    9.     static function getSessionRequest()
    10.     {
    11.         return SessionRegistry::instance();
    12.     }
    13. }
    14.  
    15.  
    16. $request = ViewHelper::getSessionRequest();
    17.        $login = $request->getComplex();
    18.      
    19.        print_r('Добро пожаловать!!! '. $login->getLogin());
    вываливается ошибка
    Код (Text):
    1. Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Complex" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in
    как раз на строке
    print_r('Добро пожаловать!!! '. $login->getLogin());
    Я же вроде сохраняю там данные прежде чем оттуда их взять ??
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Сложна)
     
  6. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    эхх гугл подсказал что это изза того что он не может найти класс в который десериализуются данные из сессии. Добавил класс Complex и ошибка пропала, но вот беда в том что похоже объект хоть и не нулл но всеже пустой т.к. $login->getLogin() выдает пустое значение :((
    --- Добавлено ---
    Все заработало :) Там в методе модели комплекс не ту переменную возвращал))