将对象从一个页面移动到另一个页面?

13

大家好。我在 PHP 中的面向对象编程方面有些新。我学会了如何编写和创建对象。是否有一种方法可以将一个对象传递到另一个脚本中?无论是使用 GET、POST 还是 SESSION 等方式。如果没有,那么我该如何在一个页面上为一个对象分配一些变量,然后在另一个页面上为相同的对象分配更多的变量呢?

谢谢。

5个回答

21
您可以将对象存储在会话中,但在调用session_start()之前需要包含包含类定义的文件(或使用类自动加载并在启动会话之前设置它)。例如:
每个页面都需要这样做:
//include class definition
require('class.php');

//start session
session_start();

第一页:
$object = new class();
$object->someProperty = 'hello';

//store in session
$_SESSION['object'] = $object;

后续页面:

$object = $_SESSION['object'];

//add something else, which will be stored in the session
$object->anotherPropery = 'Something';

谢谢!完美的例子。而且我之前不知道__autoload方法。 - dotty

3
以下是针对Tom Haigh回答中自动加载的示例:
在开始会话之前:
function __autoload($className) {
    $file = PATH_TO_FOLDER_WITH_ALL_CLASS_FILES."/".$className.'.php';
    if(file_exists($file)) {
        require_once $file;
    }
}

session_start();

传递对象的页面:

$object = new class();
$object->someProperty = 'hello';

//store in session
$_SESSION['object'] = $object;

接收对象的页面:

$object = $_SESSION['object'];

//add something else, which will be stored in the session
$object->anotherPropery = 'Something';

autoload方法将在您从会话中检索数据时自动加载对象。


2

您可以将对象存储在SESSION中。

您可以序列化对象并通过GET或POST传递。

如果您希望该对象在整个站点上持久存在,则SESSION可能是最好的选择。


谢谢,SESSION 似乎是最好的选择。 - dotty

1

你可以使用 $_SESSION,但它只会在该会话中有效。


1

在多个脚本上使用对象:

首先,您必须决定您的面向对象应用程序具有什么样的结构。 如果您使用类似于MVC模式的东西,则无需使用SESSION或REQUEST进行此操作,因为您可以将要使用的对象“插入”到“一个”中。 这是什么意思呢?

一个快速的例子:

1. 用户A进入您的站点index.php 2. 现在,您可以从静态index.html加载内容,但如果要检查用户是否已经验证以查看特定内容(例如“管理员登录”),则可以使用include_once('Authentication.php')并从该文件初始化一个类,例如<?php $Auth = new Auth_Handler; ?>这将使Auth类在index.php或任何其他要包含此类的文件中也可用。如果要将身份验证类的返回值传递给另一个文件,例如'register.php',则可以使用SESSION或任何其他缓存。由于对象大小而不建议传递整个对象。在文件开头包含和初始化所需的类要好得多。通过SESSION传递返回值占用的空间较少。 3. 这实际上取决于您想要使用哪个框架或API,或者您想要创建什么项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接