将对象从一页移动到另一页?
Posted
技术标签:
【中文标题】将对象从一页移动到另一页?【英文标题】:move object from 1 page to another? 【发布时间】:2010-12-06 08:09:03 【问题描述】:嘿伙计们。我对 php 中的 OOP 有点陌生。我已经学会了如何编写和创建对象。有没有办法获取一个对象并将其传递给另一个脚本?使用 GET 或 POST 或 SESSION 或其他。如果没有我将如何在一个页面上为对象分配一些变量,然后在另一页面上为同一对象分配更多变量?
谢谢
【问题讨论】:
【参考方案1】:您可以在会话中存储对象,但您需要在调用 session_start() 之前包含包含类定义的文件(或使用class autoloading 并在开始会话之前进行设置)。例如:
在每一页上:
//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 方法。【参考方案2】:以下是关于 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 方法会在您从会话中检索数据时自动加载对象。
【讨论】:
【参考方案3】:您可以将对象存储在 SESSION 中。 您可以序列化对象并通过 GET 或 POST 传递。
如果您希望对象在整个站点中持续存在,那么 SESSION 可能是您最好的选择。
【讨论】:
谢谢,看来 SESSION 是最好的选择【参考方案4】:您可以使用 $_SESSION。但它只适用于那个会话。
【讨论】:
【参考方案5】:在多个“脚本”上使用object
:
首先,您必须确定您的 OOP 应用程序具有什么样的结构。
如果您使用MVC
pattern 之类的东西,则不必使用 SESSION 或 REQUEST 来执行此操作,因为您可以将要使用的对象“插入”到“一个”中。
这是什么意思?
一个简单的例子:
-
用户A进入你的站点index.php
现在您可以从静态 index.html 加载内容,
但是如果您想检查用户是否经过身份验证以查看特定内容,例如“管理员登录”,您可以使用
include_once('Authentication.php')
并从此文件启动一个类,例如<?php $Auth = new Auth_Handler; ?>
这将使 Auth 类在 index.php 或您想要包含此类的任何其他文件中也可用。
如果您想将身份验证类的返回值传递给另一个文件,例如'register.php' 你可以使用 SESSION 或任何其他缓存。
由于它们的大小,不建议传递整个对象。
在文件开头包含和启动所需的类要好得多。
通过 SESSION 传递返回值会占用更少的空间。
这实际上取决于您要使用哪个框架或 API,或者您要创建什么项目。
【讨论】:
以上是关于将对象从一页移动到另一页?的主要内容,如果未能解决你的问题,请参考以下文章