Почему бы не создать защищенное свойство и не инициировать его один раз:
class mapper
{
protected $stmt;
public function update(Entities\Node $node){
if (!$this->stmt) {
$this->stmt = $this->pdo->prepare('UPDATE series SET name=:name, position=:position WHERE id=:id');
}
return $this->stmt->execute(['name'=>$node->name, 'position'=>$node->position, 'id'=>$node->id]);
}
}
Или пойти дальше - создать метод, подобный updateBatch()
и передать туда массив, поэтому вместо:
$mapper=new mapper();
foreach($arr as $node) $mapper->update($node);
use:
$mapper=new mapper();
$mapper->updateBatch($arr);
Использование статической переменной должно выглядеть примерно так:
public function update(Entities\Node $node){
static $stmt;
if (!$stmt) {
$stmt=$this->pdo->prepare('UPDATE series SET name=:name, position=:position WHERE id=:id');
}
return $stmt->execute(['name'=>$node->name, 'position'=>$node->position, 'id'=>$node->id]);
}