【问题标题】:Storing A PHP Object In A Session Variable在会话变量中存储 PHP 对象
【发布时间】:2011-01-03 18:39:50
【问题描述】:

我是 OOP 的新手,正在编写我的第一堂课。我为一家保险经纪人工作,我正在尝试使用一个类来存储有关报价的信息,并将对象存储为会话变量。

事情是,当我查看会话变量时,我得到:

sessionName         

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => myClass
    [brokerId] => 

谁能告诉我为什么显示不完整的类名?

【问题讨论】:

    标签: php object


    【解决方案1】:

    确保在调用 session_start() 之前存在类定义,例如

    require_once 'class.MyClass.php';
    session_start();
    

    或设置一个 unserialize_callback_func 来尝试加载类定义,如http://docs.php.net/function.unserialize 所述。

    编辑:这也可以通过spl_autoload_register() 完成。例如

    spl_autoload_register(function($name) {
        // only a demo ...this might be insecure ;-)
      require_once 'class.'.$name.'.php';
    });
    session_start();
    echo '<pre>';
    var_dump($_SESSION);
    echo '</pre>';
    

    【讨论】:

      【解决方案2】:

      我自己设法解决了这一切,但不知道如何。

      我确保显示值的页面结构如下:

      require_once("Class.php");
      session_start();
      
      $_SESSION['myObject']->printVariables();
      

      构造对象的页面是这样的:

      # Include the class
      require_once($_SERVER['DOCUMENT_ROOT'] . "/Class.php");
      
      # Instantiate a new policy
      $_SESSION['myObject'] = new quote('54');
      $_SESSION['myObject']->printVariables();
      

      我还确保显示调用该对象的页面没有使用任何序列化函数,因为它们似乎只会导致错误。

      【讨论】:

        【解决方案3】:

        我正在使用这个

         if (!is_object($_SESSION)) $_SESSION = new ArrayObject();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-06
          • 2012-01-26
          • 2011-06-10
          • 1970-01-01
          • 2013-10-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多