【问题标题】:use same object for different files in php对php中的不同文件使用相同的对象
【发布时间】:2012-07-19 08:39:33
【问题描述】:

我有两个文件,分别是 file1.php 和 file2.php。我有一个名为 form 的 php 文件,其中定义了类表单。 我在 file1.php 中创建了一个对象,如下所示:

require_once('form.php');
$x=$_GET['field'];
$form = new Form("", ""); 
$personal = new Block("");

$address = new TextArea("address", $x, "", 3, 30); 
$personal->add($address);
$form->add($personal);
echo $form;

现在我想在另一个文件 file2.php 中使用这个对象 $form 和 $personal,如下所示:

$personal = new Block("");
$name = new Text("name",$x);
$personal->add($name);
$form->add($personal);
echo $form;

我如何在 php.ini 中使用这些对象。请帮忙。

【问题讨论】:

  • 您要创建新实例还是使用在 file1.php 中创建的“旧”实例?
  • 我想使用在 file1.php 中创建的旧实例

标签: php


【解决方案1】:

如果您将一个 PHP 文件包含到另一个 PHP 文件中,则没有问题,因为两者中的代码都会合并到包含代码的范围内。

否则,如果您希望我们重用代码中不同位置的对象,您可以使用registry(另见:How is testing the registry pattern or singleton hard in PHP?)来存储实例化对象。

如果您计划在下一页加载时重复使用相同的对象,则需要对它们进行序列化,将序列化的对象存储在会话/缓存(或其他地方)中,并在加载下一页后将其反序列化。在这种情况下,您还需要一些机制来建立数据库连接或执行其他必需的任务 (see: __wakeup())。

【讨论】:

    【解决方案2】:

    通常,每次运行脚本时,您都必须创建对象的新实例。

    如果没有,您可以序列化对象,将其转换为字符串格式,然后在需要时取消序列化,但您必须将字符串存储在某处。声明一个新类通常更容易。


    在大多数情况下,您将使用您的对象来修改数据库中的值。创建新实例时(在页面重新加载时),它会查看数据库以获取修改后的值。这样,同一个实例就不必在重新加载后持续存在。

    您的类将使用 getter 和 setter(“访问器”和“修饰符”)来处理您需要的值 - 例如 $address

    【讨论】:

      【解决方案3】:

      首先包含file1.php

      然后调用实例:

      require_once('file1.php');
      $name = new Text("name",$x);
      $personal->add($name);
      $form->add($personal);
      echo $form;
      

      请记住,$form$personal 的实例已经在 file1.php 中创建

      【讨论】:

      • 当我包含 file1.php 时,它也会给出 file1.php 中定义的响应
      猜你喜欢
      • 2012-08-13
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2017-02-02
      • 2011-12-16
      • 2014-12-24
      • 1970-01-01
      相关资源
      最近更新 更多