2011-04-22 8 views
0

У меня есть 3 файлакак сохранить состояние объекта в PHP

  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.

Ваша помощь будет очень признательна. Благодаря !!

ответ

5

Самый простой способ - сохранить объект в сериализованной форме в переменной $ _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

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

Например:

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; 
    } 
} 

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

file1.php

<?php 
    session_start(); 
    $email = "[email protected]"; 
    $_SESSION['user'] = $email; 

файл2.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; 
Смежные вопросы