Bulgaria PHP Conference 2019
Tags: php, conference, bgphp, community
Published: 2019-12-16 10:23:07

---
title: Bulgaria PHP Conference 2019
published: true
description: PHP continues to grow and is one of the most popular and modern languages for web nowadays. PHP grows together with its community that drives public events, meetups and conferences. That's what I learned from the last Bulgaria PHP Conference I visited.
tags: php, conference, bgphp, community
cover_image: https://thepracticaldev.s3.amazonaws.com/i/2myv9l0s6ahne3etx24a.jpg

---

Let's talk about organization, preparation and venue first. From my point of view, the organizers did a lot to make this conference great, at least they tried to do their best. The conference, same as the workshop took place in the very center of the city, in the biggest public hall. It was quite easy to find it and to get there, either with public transport or by foot if you were staying in the city center. One day in advance I got an email with quite descriptive instruction about everything I should know: how to get there, recommended places to stay, what they prepared for attendees etc.

Unfortunately, I was a bit confused, because I did not figure out how to buy a ticket for the Workshop day if you already bought a conference ticket, when the workshop stream was not announced. Directly at the entrance to the workshop, there was a possibility to buy it, but I decided that it is not worth it and it is a bit expensive. Anyway, I am not sad about this fact, as conference organizers prepared a free of charge tour in the city and it was a good alternative.

On the conference day, everything started with registration, grabbing my personal badge, general community talk and breakfast. I felt pretty comfortable there as organizers always tried to take care of us: there was a lot of drinks and snacks there, lunch was served by a special catering company and in the afternoon they made homemade cakes for us.

And now more about the conference: it had 3 streams in parallel and in the afternoon one of these streams became unConf, where anyone could share something with everyone. The biggest stream had a lot of seats for all attendees, but not every talk assembled so many participants.

You have to know about me, that I do not believe I can learn something from any talk, because most of the things are already known from programming paradigms, web development and PHP in general. Usually, talks at conferences are just a shared experience, exploring new unknown stuff or repeating something like SOLID, caching and other. Everything you want to learn could be easily and faster found on the web, and if you missed some talks you could watch them later on YouTube, moreover, for free. Personally, all these conferences are just community spirit, free baubles and lunch. **But this conference managed to absolutely surprise me!**

The biggest discovery for me was a talk about modern SQL from Markus Winnand. How much I did not know about SQL in general. Knowing modern relational databases, such as MySQL, PostgreSQL, Oracle DB or SQLite, does not mean you know modern SQL. The most SQL standards and features were introduced since SQL-1999 (recursion), SQL-2003 (schemaless and analytical, like median), SQL-2011 (system versioning, aka time-travelling), SQL-2016 (`JSON_TABLE`), etc. *A lot* has happened since SQL-92, SQL has evolved *beyond* the relational idea. If you use SQL for *CRUD* operations only, you are doing it wrong.

> *__Do not use self-joins in SQL anymore!__ Also, avoid `OFFSET`s from your statements, they are a performance leak!*

![All employees must wash hands after using self-joins](https://thepracticaldev.s3.amazonaws.com/i/l73lykfzprreu0tbfib6.jpg)

The saddest conclusion I made: the most popular RDBMSes made themselves compliant with modern SQL only recently, but still, there are some features not ready in all RDBMSes. But what about modern ORMs? When will they be compliant with all the features we have in modern SQL? Or is it the best solution, for now, to avoid ORMs and write custom queries?

![SQL recursion and analitical](https://thepracticaldev.s3.amazonaws.com/i/kjua5zztnwvxvro62ca6.png)
![SQL system versioning and JSON_TABLE](https://thepracticaldev.s3.amazonaws.com/i/9w4nzrzsh6m2p5fw8unn.png)

*By the way, he has a book about SQL performance explained, it is highly recommended to read it.* You can find more info on his [website](https://modern-sql.com/) or buy his book with stickers and mug.

The conference was worth visiting at least for the sake of this talk, and I was very pleased with the fact that I learned so many new things I can use in my applications to boost performance. Anyway, there were also a few talks worth attending:

- **Encoding and charset**, presented by Andreas Heigl. Worth to know that encoding is not a character set and what is what. How to properly work with UTF-8 in PHP and MySQL. Be aware that `utf8` in MySQL is not a real UTF-8 encoding, you have to use `utf8mb4` instead for proper UTF-8.

- **Automated PHP Refactoring**, presented by Haralan Dobrev at unConf. He shared a [collection of all known tools](https://github.com/exakat/php-static-analysis-tools) and showed how they could be implemented together.

- **Hexagonal Architecture** by Nicolas Carlo. It was not that much for me personally as DDD is based on this architecture, but anyway it was a very good structured talk with good examples and real-life cases.

- **PHP-FIG Panel** to describe a stack of standards they have. Be aware that PSR-2 is deprecated right now and PSR-12 should be used instead.

***

Here is a list of some useful slides for you:

- [More Than a Query Language: SQL in the 21st Century](https://modern-sql.com/slides/SQLinThe21stCentury-2019-11-09.pdf)
- [How to tame a 🦄: encoding stuff](https://heiglandreas.github.io/slidedeck/HowToHandlePILE_OF_POO/20190314-confoo/index.html#/)
- [SOLID design principles for better team performance](https://speakerdeck.com/trajchevska/solid-design-principles-for-better-team-performance)