【发布时间】:2011-08-27 19:50:10
【问题描述】:
我如何查看在 php.ini 中加载了多少个类的对象。对象是否也在服务器上的单个会话中加载?或者在服务器端也可以跟踪来自其他会话的对象?
其实我很困惑。当一个对象被 PHP 加载时,它驻留在哪里?是在浏览器中吗?是否在会话中,会话一过期就过期?
【问题讨论】:
我如何查看在 php.ini 中加载了多少个类的对象。对象是否也在服务器上的单个会话中加载?或者在服务器端也可以跟踪来自其他会话的对象?
其实我很困惑。当一个对象被 PHP 加载时,它驻留在哪里?是在浏览器中吗?是否在会话中,会话一过期就过期?
【问题讨论】:
这会有帮助吗?
<?php
class Hello {
public function __construct() {
}
}
$hello = new Hello;
$hi = new Hello;
$i = 0;
foreach (get_defined_vars() as $key => $value) {
if (is_object($value) && get_class($value) == 'Hello')
$i++;
}
echo 'There are ' . $i . ' instances of class Hello';
【讨论】:
如何查看 php 中加载了一个类的多少个对象。
如果你不实际在类的构造函数中保持计数,我认为没有办法做到这一点。
当一个对象被 PHP 加载时,它驻留在哪里?是在浏览器中吗?是否在会话中,会话一过期就过期?
它驻留在为该请求调用的 PHP 进程分配的内存中。一旦当前请求完成或被终止(或被unset()),它就会过期。
会话有助于跨多个请求识别用户。它的存活时间更长 - 当它被销毁、用户的会话 cookie 被删除或会话达到其到期时间时,它就会过期。
【讨论】:
对象只是一个复杂的变量。它可以将几个简单的类型放在一起,并且可以有函数。
尽管简单类型和对象之间存在许多差异,但对象只是一个变量。对象不会通过会话共享,也不会发送到浏览器,而不仅仅是简单的整数或字符串。
【讨论】:
一个对象只存在于服务器上、内存中,并且只存在于脚本执行的整个生命周期内,除非保存到用户的$_SESSION 中。即使保存后,它也不再是一个对象,而是变成了一个序列化的字符串。它可以在同一会话或以后的会话中再次重构为对象。
脚本的生命周期是指网络服务器调用它的那一刻,直到脚本最后一行被处理的那一刻。 PHP 引擎可以通过垃圾回收处理脚本不再需要的对象,甚至在脚本完全终止之前。
【讨论】: