Image

AI-Access: One PHP API for Five Language Models

AI Access unifies OpenAI, Claude, Gemini, DeepSeek and Grok behind a single PHP interface: conversation, streaming, tool calling, structured output, images, embeddings and batch processing. Zero dependencies, plain PHP 8.3. It grew out of a wrapper written in 2024, reached version 0.1 in the spring of 2025 and a 1.0 sixteen months later, because promising a stable interface on top of five APIs that are not stable is the hardest part of the whole job.

Image

A replacement for PHP ext-imap that has no dependencies

As of version 8.4, the imap extension is no longer part of PHP. The two most popular replacements are mere wrappers around that same extension, and the third one drags in twenty-four packages including a chunk of Laravel. dg/imap speaks IMAP on its own: under nine hundred lines of solid object-oriented code and zero dependencies. The story of a thin wrapper around ext-imap of which nothing but the API survived.

Image

MySQL: Ten Rules for a Schema That Won't Betray You

Binding conventions for MySQL schema design, where every rule had to earn an answer to the question why. From naming tables through the difference between modified_at and updated_at to the collation that silently disables your CHECK constraint, and the ascii column that returns a 500 instead of a 404. There are thirteen rules in the end, but the article owns up to that itself.

Image

100vw is a trap! It can't measure the viewport width

Using width: 100vw in CSS and your page is showing a horizontal scrollbar because of it? Learn why viewport units ignore the scrollbar and see 3 elegant ways to fix this bug (using JS, cqw, or @property)

Image

Duck Typing Is Dead, Dave!

Every dynamic language crawled back to types. TypeScript buried JavaScript, Python slapped annotations on the duck, and AI hammered the final nail. I've been pushing strong types and DI since before it was fashionable. The duck is dead, and I'm not even pretending to be sorry.

Image

How to Make Your Code Worse by Fixing PHPStan Errors

PHPStan tells you that preg_replace can return null, and you solve it by casting (string). Congrats, you just turned a fatal error into a silent empty string. I'll show you why a loud error is always better than one you don't know about.

Image

What Claude Code Can Do

I told Claude Code to turn off wifi. It did. Then I asked it to turn wifi back on. It couldn't — no internet. That one moment captures everything about this “everything agent”: it can code, organize files, analyze data, automate your work. Just never let it cut its own lifeline.

Image

The Ultimate PHP Comparison Reference is Here!

The === operator lets you sleep peacefully, but what about < and >? There's no strict version of those, and PHP takes the reins. I've prepared the definitive truth tables for PHP 8.x and 7.x – no more guessing, no more test scripts, just find the intersection.

Image

How to Install Claude Code: A Beginner's Guide

A step-by-step guide to getting Claude Code up and running — whether you prefer the desktop app, terminal, or WSL. Unlike browser-based AI chat, this thing actually edits your files and runs commands. Pick your poison, I'll walk you through all of them.

That's all. More articles are on the way.

phpFashion © 2004, 2026 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.