Next Chapter in PHPStan Saga

PHPStan wouldn’t be so popular and so good today if it wasn’t open-source. Everyone can try it out by installing it through Composer and also contribute to it by sending a pull request on GitHub. More than 120 people helped improve PHPStan. I’d very much like this trend to continue so don’t worry, PHPStan will stay open-source and I will continue to work on it in this form. Of course, the elephant in the room is monetization. Right now, I’m accepting money through Patreon, release sponsorships and one-time donations on PayPal. It brings in only one or two months worth of salary per year, which is nice, but not nearly enough to go full-time and support my family. Which is why I came up with the idea of PHPStan in the form of SaaS and I think it’s a great fit. It’s going to be based on the open-source version so I will still have incentives to make it as awesome as possible.

PHPStan hledá sponzory

I believe there‘s a lot of value in PHPStan, it saves time and money twice — you don‘t have to write tests for every line of code to verify that your application works, and it prevents critical bugs reaching production so you‘re not losing money because your customers can‘t buy the thing they want. People who are already using it can‘t imagine their PHP projects without it anymore. And their ranks grow every day. To make sure PHPStan is here to stay and is being continuously and consistently improved, it needs funding. That‘s why I came up with the idea of release sponsorship. We piloted it last November with Roave and it was awesome.

Union Types vs. Intersection Types

Tento týden vyjde nová verze PHPStanu, která bude chápat váš kód opět o mnoho lépe. Zavádí mimo jiné tzv. intersection types. Jelikož jde o téma, které stojí na vlastních nohou (není ho vždy potřeba vázat se statickou analýzou) a všichni, kdo v dnešní době píšou moderní webové aplikace, by se o type theory měli zajímat, sepsal jsem porovnání union typů a intersection typů.

Asynchronní PHP

V polovině dubna jsem si vyzkoušel nový formát předávání zkušeností – přednášku přímo z obýváku. Naživo si mě naladilo asi 80 lidí, kteří měli možnost i klást otázka přes chat, na které jsem mezi připravenými bloky odpovídal. Byla to super zkušenost, kterou si rád zopakuji.

Asynchronní kód už dávno není doménou jen Node.js. Abyste si vyzkoušeli psát a provozovat aplikaci, která dokáže dělat více věcí naráz, nemusíte se učit programovat v jiné technologii, vystačíte si s PHP, které vás příjemně překvapí svým výkonem a možnostmi.
Vysvětlíme si, co přesně asynchronnost znamená, kde všude se s ní dá setkat a kdy se vyplatí ji použít. Ukážeme si, jak přesně fungují promises a napíšeme si kód, který je využívá a poskytuje.
V druhé polovině livestreamu pak předvedu konkrétní knihovny a postupy pro nejčastější I/O potřeby, tedy asynchronní HTTP požadavky, SQL dotazy a přístupy na filesystém.

Na livestream i záznam jsem měl skvělé ohlasy. Z jednoho projektu se mi ozvali s tím, že na základě mé přednášky vyměnili svůj dosavadní způsob paralelizace odchozích HTTP požadavků skrze forkování procesů právě za asynchronní princip s event loop a ušetřili tím spoustu paměti a výpočetního výkonu.

Usnadněte si práci silně typovaným kódem a statickou analýzou!

1. dubna jsem na konferenci Devel.cz mluvil o tom, jak si ušetřit práci při psaní testů, ale přesto mít spolehlivou aplikaci. Roli v tom hraje samozřejmě PHPStan, ale dodržování zmíněných tipů vede ke zvýšení čitelnosti a spolehlivosti kódu i bez použití statické analýzy.

Málokterý vývojář může s čistým svědomím tvrdit, že má 100 % kódu pokryto testy. Ale to nevadí. Ve většině reálných aplikací je nereálné a neekonomické toho dosáhnout. Ukážu, jak psát kód tak, aby vám na něj testy ani nechyběly, a přesto se na něj mohli spolehnout díky statické analýze. Představím nástroj PHPStan, který chyby v aplikaci hledá za vás. Po mé přednášce testy psát nepřestanete, ale zaměříte se s nimi na místa, kde se vyplatí.

Přednášku si můžete pustit se synchronizovanými slajdy zde, nebo mrkněte na oanotované slajdy níže.

Asynchronní zpracování s RabbitMQ

Loni v září jsem nasedl do auta a vydal se 600 kilometrů z Prahy na severovýchod k Varšavě. V odlehlém komplexu obřího hotelu Ossa se konala neméně obří konference PHPCon Poland 2016 s nabitým programem plným přednášek od místních i zahraničních speakerů. A já byl jedním z nich.

Připravil jsem si přednášku o RabbitMQ. Toto téma je mi velmi blízké, protože v PHP rád vyvádím netradiční věci odpoutané od klasického modelu „spusť se, vyřiď request a umři“. Použitím RabbitMQ či jiné message queue můžete zefektivnit svou aplikaci a třeba zařídit, aby vaši uživatelé obdrželi vyžádaný e-mail okamžitě a nikoli až při příštím spuštění skriptu pomocí Cronu.

Pokud si nechcete pouštět video, mrkněte na slidy. Jinak klikněte na ▶ níže:

Tři pilíře statické analýzy v PHP

Poslední dobou jsem posedlý statickou analýzou. Možnost objevovat chyby v kódu bez vynaložení úsilí je lákavá a skutečně funguje. Na Medium.com jsem shrnul, jaké jsou dnes možnosti ohledně statické analýzy v PHP a jaké nástroje může každý začít hned využívat. Zmínil jsem samozřejmě i PHPStan.

PHPStan: hledání chyb v kódu bez psaní testů

Na Medium.com jsem se rozepsal o tom, na čem pracuji již několik let, z toho poslední rok intenzivně – na nástroji pro statickou analýzu PHP kódu. PHPStan hledá chyby, aniž by bylo třeba daný kód spouštět, čímž se blíží kompilátorům staticky typovaných jazyků. Využívá informací, které jsou k dispozici při parsování PHP kódu - typehinty, dokumentační komentáře a reflexi.

Různé vývojové verze PHPStanu nám už přes rok hlídají produkční kód ve Slevomatu a už mnohokrát včas na CI serveru odhalil chybu, která by se jinak dostala do produkce. Pochvalují si ho také vývojáři v Hele.cz, DámeJídlo.cz a Bonami.

Oproti podobným nástrojům nabízí především rychlost, rozšiřitelnost1 a různé nastavení striktnosti, aby vás napoprvé nezahltil nadbytečným množstvím chyb, ale pouze těmi nejzásadnějšími, a mohli jste ho tak rovnou začít používat.

Delší a podrobnější povídání o něm najdete na najdete na Medium.com nebo se rovnou podívejte na GitHub, jak ho zprovoznit na svém projektu. V případě, že byste s integrací a nastavením chtěli pomoct, určitě se ozvěte.

  1. Pro popis magického chování tříd, které si dynamicky definují properties a metody pomocí implementace magických metod __get, __set a __call