我如何在php中实现这一点


How can I achieve this in php?

我想创建一个对象,它不需要一直创建。。。。例如,我有一个用户对象,用户是从数据库中创建的,所以,当用户登录时,我可以从数据库中读取用户对象信息。。。每个用户发出请求,我都需要再次创建一个新的用户对象。。。。即使我制作了一个singleton对象。。。它仍然可以"保留"对象。。。。但我想保存php和db之间的通信。。。有什么方法可以保留一个对象而不是一直查询数据库吗?非常感谢。

是否将其放入$_SESSION?如果我读对了你的问题,那就有意义了。

但我想保存php和db 之间的通信

使用APC或Memcached并缓存查询。每当用户对象以需要将其写回数据库的方式更改时,请使缓存无效。

这仍然会在每个请求上创建一个新的User对象,但它为您节省了到数据库(但不是到缓存)的往返行程。如果不将PHP对象序列化/持久化到其他层,就无法在请求之间将其保留在内存中。PHP什么都不共享。PHP对象为请求而活。

至于将用户数据存储在对象中并存储在会话中,我认为这是可以的,尽管我会在会话本身中拖动太多数据。然而,您需要在不断重新查询数据源和使用会话之间取得平衡。这实际上取决于您的应用程序和环境。

您可以通过两种方式实现这一点:

1) 正如Tattat所说,您可以查询数据库,获取用户信息,并将其作为对象保存到会话$_SESSION['userObj'] = $userObj中。然后,您可以在任何需要的地方将其从会话中撤回,例如$user = $_SESSION['userObj'];

2) 第二种方法是从包含在所有页面上的公共php页面继承(目前称之为common.php)。使用PHP GLOBAL变量使其在任何包含commmon PHP文件的页面上都可用。例如

global $user; 
$admin = db_fetch_object(db_query("SELECT * FROM user u WHERE u.user_id = '%d'", $_SESSION['admin_id']));

只要包含了我之前提到的common.php文件,那么其他php页面就可以访问可变的$user

希望这个帮助伙计:)