【问题标题】:move object from 1 page to another?将对象从一页移动到另一页?
【发布时间】:2010-12-06 08:09:03
【问题描述】:

嘿伙计们。我对 PHP 中的 OOP 有点陌生。我已经学会了如何编写和创建对象。有没有办法获取一个对象并将其传递给另一个脚本?使用 GET 或 POST 或 SESSION 或其他。如果没有我将如何在一个页面上为对象分配一些变量,然后在另一页面上为同一对象分配更多变量?

谢谢

【问题讨论】:

    标签: php oop session post get


    【解决方案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 来执行此操作,因为您可以将要使用的对象“插入”到“一个”中。 这是什么意思?

        一个简单的例子:

        1. 用户A进入你的站点index.php
        2. 现在您可以从静态 index.html 加载内容, 但是如果您想检查用户是否经过身份验证以查看特定内容,例如“管理员登录”,您可以使用include_once('Authentication.php') 并从此文件启动一个类,例如<?php $Auth = new Auth_Handler; ?> 这将使 Auth 类在 index.php 或您想要包含此类的任何其他文件中也可用。 如果您想将身份验证类的返回值传递给另一个文件,例如'register.php' 你可以使用 SESSION 或任何其他缓存。 由于它们的大小,不建议传递整个对象。 在文件开头包含和启动所需的类要好得多。 通过 SESSION 传递返回值会占用更少的空间。

        这实际上取决于您要使用哪个框架或 API,或者您要创建什么项目。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-03
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          相关资源
          最近更新 更多