как сохранить состояние объекта в php - PullRequest
0 голосов
/ 22 апреля 2011

у меня есть 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();

test1.php содержит

require("class.myclass.php");
$obj->assign(1);
$obj->show();

test2.php содержит

require("class.myclass.php");
$obj->show();

В test2.php метод $obj->show(); не показывает значение, которое метод $obj->assign(1); присвоил в test1.php

Я думаю, что когда я запускаю test2.php объект $Объект obj создается снова, поэтому назначенное значение исчезает.Есть ли способы сохранить состояние объектов, поэтому я могу использовать другие страницы php

Ваша помощь будет принята с благодарностью.Спасибо !!

Ответы [ 2 ]

6 голосов
/ 22 апреля 2011

Самый простой способ - сохранить объект в сериализованной форме в переменной $ _SESSION, чтобы он автоматически сохранялся между посещениями вашего сайта.

test1.php:

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

test2.php:

session_start();
$obj = unserialize($_SESSION['myobj']);
$obj->show();

Для такого простого объекта это все, что нужно.Если ваш объект содержит дескрипторы ресурсов (соединения mysql, объекты curl и т. Д.), Вам потребуется дополнительная логика для обработки восстановления этих соединений, когда объект восстанавливается во время несериализации.

Однако,вы можете захотеть пересмотреть автоматическое создание экземпляра вашего объекта в файле класса или, по крайней мере, превратить его в одноэлементный объект, чтобы ваш файл класса мог быть включен в несколько мест без повторной перезаписи $ obj в последний раз при каждом перезаписи.-включить файл.

1 голос
/ 23 января 2014

Одна из техник, которую я использовал в своих проектах, - это создание хорошего конструктора классов.Под этим я подразумеваю создание конструктора, который может воссоздать один и тот же объект с одним аргументом.

Например:

class User {

    public $email;
    public $username;
    public $DOB;

    function __construct($input) {
        // by providing a single input argument, we can re-create the object...
        $this->email    = $input;
        $userData       = $this->getUserData();
        $this->username = $userData['username'];
        $this->DOB      = $userData['DOB'];
    }

    function getUserData() {
        $email = $this->email;
        $array = ["username" => "", "DOB" => ""];
        // Database query/queries to get all user info for $email go here...
        return $array;
    }
}

теперь вы можете воссоздать объект, если храните $ emailв качестве переменной $ _SESSION, например:

file1.php

<?php
    session_start();
    $email = "hi@example.com";
    $_SESSION['user'] = $email;

file2.php

<?php
    session_start();
    include('User.class.php'); // this is the class example above
    $email = $_SESSION['user'];
    $userObject = new User($email);

    // now you can access the object again as you need...
    // for example:
    $username = $userObject->username;
    echo "Welcome back " . $username;
...