gpt4 book ai didi

php - 克隆原型(prototype)对象是否比从头开始创建对象提供性能改进?

转载 作者:可可西里 更新时间:2023-11-01 13:24:30 24 4
gpt4 key购买 nike

您可以在下面看到两个简化的片段,它们的结果没有变化。

模式一,从零开始的对象:

foreach ($recipients as $recipient) {
$message = new Message();
$message->setBody("This is the body of the message.");
$message->setRecipient($recipient);

$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}

模式二,克隆一个原型(prototype)对象:

$prototype = new Message();
$prototype->setBody("This is the body of the message.");

foreach ($recipients as $recipient) {
$message = clone $prototype;
$message->setRecipient($recipient);

$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
unset($prototype);

对象克隆(模式 2)是否在内存使用、垃圾收集和/或 CPU 周期方面提供了比从头创建对象(模式 1)更高的性能?还要考虑大量固定属性(在实例之间不会更改)和大量循环。


更新:我需要在每个循环中使用不同的对象实例。我在示例中添加了 saveToDatabase 调用以类似于此,例如让它为消息提供一个 ID。 ;)

最佳答案

看起来有人在您的代码方面提供了帮助,但是为了其他访问该问题的人的利益,这里是标题中所问内容的答案:

通常。 new 关键字导致 __construct() 魔术方法运行; clone 关键字导致 __clone() 魔术方法运行。

原型(prototype)模式的要点是避免反复重新运行昂贵的构造函数,尤其是当最终结果(就对象的内部状态而言)每次都相同时。

原型(prototype)模式通常仅在存在需要解决的重大性能问题的情况下使用,而不仅仅是在您需要大量对象时。

关于php - 克隆原型(prototype)对象是否比从头开始创建对象提供性能改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com