создание нового класса в цикле или нет в цикле? - PullRequest
3 голосов
/ 21 декабря 2009
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 ]

5 голосов
/ 21 декабря 2009

Краткий ответ: это зависит.

Длинный ответ: Если повторное создание экземпляра не не меняет результат выполнения, то создайте класс только один раз за пределами цикла.

Если повторное создание экземпляра действительно изменяет результат выполнения, тогда создание экземпляров класса внутри цикла является подходящей реализацией.

То, что из этого верно, полностью зависит от того, как написан ваш класс. Я готов поспорить, что вам не нужно заново создавать экземпляр класса для каждой итерации, но это чисто умозрительный ход.

1 голос
/ 21 декабря 2009

Я не могу сказать, пока не увижу, что делает someMethod. Если он чисто функциональный, то второй образец будет , вероятно, быстрее. Если это как-то повлияет на учеников, то есть вероятность, что они приведут к различным результатам. Однако ни один из них не является «неправильным».

1 голос
/ 21 декабря 2009

Скорее всего, второй. Но это зависит от того, что именно вы пытаетесь сделать.

Если вы хотите каждый раз вызывать someMethod для одного и того же экземпляра объекта (что является вероятной ситуацией), тогда второй метод является правильным. Второй метод также предпочтителен, если не имеет значения, является ли он каждый раз одним и тем же экземпляром.

Только если вы хотите, чтобы он вызывался для другого экземпляра каждый раз, когда должен использоваться первый метод.

1 голос
/ 21 декабря 2009

Правильного нет , и в любом случае не так много пойдет не так. Я предполагаю, что они функционально эквивалентны, так как Class не имеет состояния.

0 голосов
/ 21 декабря 2009

Последнее - это улучшит производительность, так как класс создается только один раз. Что касается состояния (см. Другие ответы), просто попробуйте оба варианта и сравните результаты.

...