【问题标题】:instantiating a new class in a loop or not in a loop?在循环中实例化一个新类还是不在循环中?
【发布时间】:2009-12-21 20:09:02
【问题描述】:
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);
}

【问题讨论】:

    标签: php class loops instantiation


    【解决方案1】:

    简答:这取决于。

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

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

    哪些是正确的完全取决于您的课程是如何编写的。我敢打赌,您不需要每次迭代都重新实例化该类,但这纯粹是推测性的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          很可能是第二个。但这取决于你到底想做什么。

          如果你想每次都在对象的同一个实例上调用someMethod(这是可能的情况),那么第二种方法是正确的。如果每次是否都是同一个实例都无关紧要,第二种方法也更可取。

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

          【讨论】:

            【解决方案5】:

            后者 - 它将提高性能,因为该类仅实例化一次。就状态而言(请参阅其他答案),只需尝试它们并比较结果即可。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-01-04
              相关资源
              最近更新 更多