$ge = (new Exported())->getIterator();
$gr = (new Returned())->getIterator();
assert($ge == $gr);
case 'image/jpeg':
$prev_eh = set_error_handler(function ($no, $str, $file) {
// GdException где-нибдуь выше определите как class GdException extends RuntimeException {};
throw new GdException();
}, E_WARNING);
try {
$this->image = imagecreatefromjpeg($this->filename);
} catch (GdException $e) {
// обработка битой картинки - например, через GraphicsMagick
};
set_error_handler($prev_eh);
break;
function check(array $p, array $a)
{
$stack = new SplStack();
foreach (array_reverse($a) as $i) {
$stack->push($i);
}
$top = $stack->pop();
foreach ($p as $i) {
if ($i == $top) {
if ($stack->isEmpty()) {
return true;
}
$top = $stack->pop();
}
}
return $stack->isEmpty();
}
assert(check($pattern, $ar));
assert(!check($pattern, $arFail));
от этого растет autoincrement
в случае ошибки можно просто напросто затереть данные, а не обновить и добавить
begin;
delete from `options` where `product_id` = 123;
insert into `options` (`name`, ...) values ('opt1', ...), ('opt2', ...);
commit;