可以将 $this 分配给从 memcache 加载的另一个对象吗?

发布于 2024-11-07 19:56:10 字数 270 浏览 0 评论 0原文

在构造函数中将 $this 分配给从 memcache 加载的另一个对象可以吗? 我主要担心性能和内存。

我在想这样的事情:

function __construct($userid){
   global $memcachedvar;

   if($userobject = $memcachedvar->get($userid){
      $this = $userobject;
   } 
}

这是一个糟糕的设计模式吗?

Is it fine to assign $this to another object loaded from memcache in the constructor?
I am mainly worried about performance and memory.

I was thinking something like this:

function __construct($userid){
   global $memcachedvar;

   if($userobject = $memcachedvar->get($userid){
      $this = $userobject;
   } 
}

Is this a bad design pattern?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤千羽 2024-11-14 19:56:10

不,这不行。事实上,这是无效的。

$this 很神奇,可能无法重新分配。

No, it's not OK. It is, in fact, invalid.

$this is magical and may not be re-assigned.

冷︶言冷语的世界 2024-11-14 19:56:10

来自评论:

PHP 禁止在对象中的任何位置重新分配 $this;您的代码将触发致命错误。当调用构造函数时,内存将被分配给一个全新的对象,并且将其交换为另一个对象是不合适的(无论如何根据引擎)。 - BoltClock


对象本身不应该负责缓存。如果您需要此类功能 - 添加另一层,该层将实例化新对象或从 mcd 检索对象。 - zerkms


@BoltClock 和 @zerkms 给出了很好的评论。显然这个构造函数实际上是不可能的。

From comments:

PHP forbids reassignment of $this anywhere in an object; your code will trigger a fatal error. By the time the constructor is invoked, memory would have been allocated for a brand new object and it'd be inappropriate (according to the engine anyway) to swap it out for another one. - BoltClock

Object itself shouldn't be responsible for caching. If you need such functionality - add another layer which will instantiate new object or retrieve one from mcd. - zerkms

@BoltClock and @zerkms give great comments. Clearly this constructor is not really possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文