Цикл Foreach, который приводит к созданию объекта - PullRequest
3 голосов
/ 02 августа 2010

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

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

foreach($example as $exampleId){
    $newExample=new Example($exampleId);
    $newExample->updateStatus('active');
}

Есть ли лучшие способы обойти это? Это кажется плохой практикой, но я изо всех сил пытаюсь найти альтернативный путь.

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

это опция?

$newExample=new Example();
foreach($example as $exampleId){
    $newExample->updateStatus($exampleId,'active');
}

в противном случае вы всегда можете сделать это:

foreach($example as $exampleId){
    $newExample=new Example($exampleId);
    $newExample->updateStatus('active');
    $newExample->__destruct(); 
    unset($newExample);
}

для этого вам понадобится другой метод в вашем классе

$newExample=new Example();
foreach($example as $exampleId){
    $newExample->set_example_id($exampleId);
    $newExample->updateStatus('active');
}
1 голос
/ 02 августа 2010

Похоже, создание вашего объекта связано с накладными расходами, поскольку оно загружается из базы данных или где-то еще? Не могли бы вы добавить статический метод к Example, который обновляется, не создавая объект, который загружается и заполняется сам? Тогда вы могли бы сделать:

foreach($example as $exampleId){
    Example::UpdateExampleStatus($exampleId,'active');
}
...