Верю… Верю, что goto может уменьшить количество строк. Но так же верю, что тут можно избежать использование goto без особых накладных расходов на строчки или производительность.
Беспокойство в том, что token_get_all предназначен для языка PHP. А не для Вашего языка. Ведь таким макаром можно пойти дальше: начинать разбираться этой функций какой-нибудь код какого-нибудь другого языка.
Хотя, надо отметить, у этого подхода есть преимущества.
И ещё… у меня создалось впечатление, что Вы используете token_get_all для токенезирования своего синтаксиса. В принципе ничего такого… но меня это беспокоит.
А, вообще, я было хотел воспользоваться таким подходом. Даже название придумал 'расширение транзакции'. Только мне не понравилось, что при внутреннем откате откатывается вся транзакция.
Не знал, что такая функция отсутствует в mysqli (обычно имею дело с PDO). Но можно использовать BEGIN; или START TRANSACTION; как запрос. И за одно isAutocommitOn переименовать в inTransaction.
Не, Ваш код работает, но понятность его можно повысить.
1. Отменяется… потому что $this это как раз ссылка на переменную, которая не объявлена в функции… чуть-чуть не успел отредактировать комментарий а сейчас ещё и промахнулся...
1. Вы используете не замыкания (даже если они так называются в PHP), а анонимные функции.
2. Вы очень странно начинаете транзакции. Почему нельзя делать begin?
Странно, что были противопоставлены оба подхода. У них разные цели и методы. Я думаю, что они могут быть успешно совмещены.
Но при применении вперёдсмотрящей совместимости можно получить тот же эффект как от преждевременной оптимизации.
При этом нет описания общих подходов и приёмов для опережающей совместимости. Что может повлечь за собой кучу ненужного кода, который (в отличии от обратной совместимости) вообще никогда не работал и не будет работать.
а) — секущая плоскость пересекает все образующие конуса в точках одной его полости; линия пересечения — замкнутая овальная кривая — эллипс, в частности, когда плоскость перпендикулярна оси конуса, — окружность;
Хотя, надо отметить, у этого подхода есть преимущества.
Не, Ваш код работает, но понятность его можно повысить.
чуть-чуть не успел отредактировать комментарий
а сейчас ещё и промахнулся...
2. Вы очень странно начинаете транзакции. Почему нельзя делать begin?
Но при применении вперёдсмотрящей совместимости можно получить тот же эффект как от преждевременной оптимизации.
При этом нет описания общих подходов и приёмов для опережающей совместимости. Что может повлечь за собой кучу ненужного кода, который (в отличии от обратной совместимости) вообще никогда не работал и не будет работать.