在循环中实例化一个新类或不在循环中实例化?

时间:2009-12-21 20:09:02

标签: php class loops instantiation

require_once('Class.php');
$myArray = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // etc

哪个是对的?

foreach($myArray as $key => $val) {
    $class = new Class();
    $result = $class->someMethod($val);
}

$class = new Class();
foreach($myArray as $key => $val) {
    $result = $class->someMethod($val);
}

使用http://simplepie.org/wiki/reference/simplepie/get_items

编辑更具体
$aFeeds = array(rssFeed1,rssFeed2,rssFeed3,...);
foreach($aFeeds as $key => $feedURL) {
    $feed->set_feed_url(feedURL);
    $feed->init();
    $feed->get_items(0, 5);
}

5 个答案:

答案 0 :(得分:5)

简答:取决于。

长答案:如果重复实例化更改执行结果,则只在循环外创建一次类。

如果重复实例化确实改变了执行的结果,那么在循环内创建类实例就是合适的实现。

其中哪一项是真的,完全取决于你的班级写作方式。我愿意打赌你不需要每次迭代都重新实例化这个类,但这纯粹是推测性的。

答案 1 :(得分:1)

没有正确的,在任何一种情况下都不会出错。我认为它们在功能上是等价的,因为Class似乎没有状态。

答案 2 :(得分:1)

除非我看到someMethod做了什么,否则我无法说出来。如果它是纯功能的,那么第二个样本可能更快。如果它以某种方式影响班级成员,则两者可能会导致不同的结果。但是,这些都不是“错误的”。

答案 3 :(得分:1)

很可能是第二个。但这取决于你究竟想要做什么。

如果你想每次在对象的同一个实例上调用someMethod(这是可能的情况),那么第二种方法是正确的。如果每次都是相同的实例并不重要,第二种方法也是优选的。

只有在每次使用第一种方法时,都希望在不同的实例上调用它。

答案 4 :(得分:0)

后者 - 它将提高性能,因为类只被实例化一次。就国家而言(参见其他答案),只需尝试两者并比较结果。