如何在php中保存对象状态

Wor*_*rld 0 php methods state class object

我有3个文件

  1. class.myclass.php
  2. test1.php
  3. test2.php

class.myclass.php包含

class myclass
    {
    public $value;

    function assign($input)
        {
        $this->value=$input;
        }
    function show()
        {
        echo $this->value;
        }
    }

$obj=new myclass();
Run Code Online (Sandbox Code Playgroud)

test1.php包含

require("class.myclass.php");
$obj->assign(1);
$obj->show();
Run Code Online (Sandbox Code Playgroud)

test2.php包含

require("class.myclass.php");
$obj->show();
Run Code Online (Sandbox Code Playgroud)

在test2.php中,该方法$obj->show();不显示该方法$obj->assign(1);在test1.php中指定的值

我想当我运行test2.php时,会再次创建对象$ obj,因此分配的值会消失.有没有办法保存对象的状态,所以我可以使用其他PHP页面

非常感谢您的帮助.谢谢 !!

Mar*_*c B 6

最简单的方法是将对象以序列化形式保存在$ _SESSION变量中,因此它会在您网站的点击之间自动保留.

test1.php:

session_start();
require('class.myclass.php');
$obj->assign(1);
$_SESSION['myobj'] = serialize($obj);
Run Code Online (Sandbox Code Playgroud)

test2.php:

session_start();
$obj = unserialize($_SESSION['myobj']);
$obj->show();
Run Code Online (Sandbox Code Playgroud)

对于这样一个简单的对象,这就是所需要的.如果你的对象包含资源句柄(mysql连接,curl对象等等),那么你需要一些额外的逻辑来处理在反序列化时恢复对象时恢复这些连接.

但是,您可能需要重新考虑在类文件中自动实例化对象,或者至少将其设置为单个对象,因此您的类文件可以包含在多个位置,而不会每次都覆盖最后一次$ obj你重新包含文件.