Обновить

Комментарии 7

1. Вы используете не замыкания (даже если они так называются в PHP), а анонимные функции.
2. Вы очень странно начинаете транзакции. Почему нельзя делать begin?
1. Вы используете не замыкания (даже если они так называются в PHP), а анонимные функции.

хоть вы и ответили чуть ниже на это, но я всё же напишу, что это всё-таки замыкания.
2. Вы очень странно начинаете транзакции. Почему нельзя делать begin?

Если вы имеете ввиду mysqli_begin_transaction, то версия должна быть PHP 5 >= 5.5.0
Не знал, что такая функция отсутствует в mysqli (обычно имею дело с PDO). Но можно использовать BEGIN; или START TRANSACTION; как запрос. И за одно isAutocommitOn переименовать в inTransaction.

Не, Ваш код работает, но понятность его можно повысить.
1. Отменяется… потому что $this это как раз ссылка на переменную, которая не объявлена в функции…
чуть-чуть не успел отредактировать комментарий
а сейчас ещё и промахнулся...
У вас в методе transaction() отсутствует код, который, собственно, и выполняет обратное включение автокоммита для случая, когда это необходимо, то есть, когда $need_to_off равна TRUE. Вероятно, просто упустили этот момент, так как в самом тексте статьи этот функционал имеется )
ps. Если, конечно, я все правильно понял )
Да, я пропустил его просто. Уже исправил)
А, вообще, я было хотел воспользоваться таким подходом. Даже название придумал 'расширение транзакции'. Только мне не понравилось, что при внутреннем откате откатывается вся транзакция.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации