【发布时间】:2012-03-16 09:09:22
【问题描述】:
这就是我有足够的知识去危险的地方。
我正在开发一个具有不同类型的相关类的网络应用程序。例如,有一个“Item”类和一个“User”类。 “Item”类有一个名为“Owner”的属性,它引用“User”对象。同样,“User”类有一个名为“Items_array”的属性,它是一个包含(你猜对了)“Item”对象的数组。
我的理解是对象作为引用自动返回,所以我有用于 fetch_item、fetch_user 等的函数。这些函数跟踪对象的主数组,如果它已经存在则返回正确的对象,如果存在则创建一个新对象它不存在。例如,下面是获取用户的代码。
public function get_user ($userID) {
if (!isset ($this->users_arr[$userID]))
$this->users_arr[$userID] = new User($userID);
return $this->users_arr[$userID];
}
我的 Items 类中有一些属性可以毫无问题地存储 User 对象。今天早上,我在我的 User 类中添加了一些属性来存储 Item 对象,现在我不断收到“无法打开数据库连接”错误。我已将此与 Item 对象的创建隔离 - 当我评论说一切正常时。我相当确定我已经创建了某种无限循环,其中项目不是使用引用,而是创建用户,而用户又试图重新创建项目。
这有意义吗?有没有人遇到过这样的问题,或者对如何解决这个问题有任何想法?
【问题讨论】:
-
请多发些代码,比如调用
get_user()的部分 -
您使用
__construct()方法吗?如果不是这样,创建新对象永远不会自行结束,因为属性只能由定义中的标量设置。 -
您所描述的可能会导致某种“内存不足”错误,而不是数据库连接错误。你确定数据库服务器正在运行吗?
-
请告诉我们您在用户对象的属性中添加了什么。
-
给自己一个远程调试器并逐步完成。这样您就可以快速了解发生了什么。
标签: php oop infinite-loop