【问题标题】:Storing every new PHP object in array on instantiation在实例化时将每个新的 PHP 对象存储在数组中
【发布时间】:2013-11-07 18:15:04
【问题描述】:

我对 OOP 很陌生,但是我有一个类,并且在创建每个对象后,我将它们推入一个数组中(我认为没有一种方法可以遍历类中的每个对象)。我的客户端还在 PHP4 上,所以我遇到了一些麻烦。

由于版本 4 没有 __construct 方法,我自己做了:

function construct() {
    global $LIST;
    array_push($LIST, &$this);
}

$this 之前没有&,它只是将一个空对象添加到数组中,因为在实例化之后,我会更改每个对象的一些属性。不过,现在它向我发出了警告:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of array_push(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.

我试图抑制警告,但 array_push() 前面的 @ 不起作用。显然,error_reporting(0) 除非它在我的根文件中(所有这些东西都在很多很多页面的包含中),否则它不会工作。我也无权访问 php.ini 文件。

【问题讨论】:

  • 首先,为什么?!?!如果必须,可以构建一个简单的注册表类吗?另外,在 PHP4 中,与类同名的函数会被自动调用为构造函数。
  • @AbraCadaver 为什么我要将所有对象存储在一个数组中?每个对象都是我客户网站上的一个产品,某些页面需要列出他们的所有产品。
  • 所以您构建了对象来表示特定产品,而应用程序唯一知道哪些产品可用的时候是您手动实例化它们时?我在这里闻到了严重的设计缺陷。

标签: php oop object php4


【解决方案1】:

我很难相信它只适用于 &$this,因为错误消息指出它正在按值传递对象 [又名,如 $this]。

另外,global 在类声明中?坏的。可怕的。您为什么不执行以下操作?

$LIST[] = new MyObject();

如果 PHP4 过于陈旧以至于 $arr[] 语法还无效,那么:

array_push($LIST, new MyObject());

还有,神圣的上帝。 PHP4?升级它。严重地。我不认为你可能想出一个正当的理由在这一点上仍然使用 PHP4。

【讨论】:

  • PHP 4 刚开始使用类和对象,你不能依赖 PHP 4。Sammitch 是对的,你需要升级!
  • 一旦我将 $LIST 推送到那里,我将如何获得它的最新索引,因为我需要在它进入那里后立即更改一些属性。
  • 没关系。我只是将每个对象推送到 $LIST 上,并使用该对象传递了一个包含所有变量的数组。谢谢你的想法,@Sammitch。
猜你喜欢
  • 2019-11-03
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2010-11-07
  • 1970-01-01
  • 2014-10-31
相关资源
最近更新 更多