Recent changes
Wednesday November 04 2026
-
Database code for PHP 8 and every engine Updated Markdown page
Bring an old extension's database code up to Exponential 6 - from mysql_* calls and MySQL-only SQL to eZDB, eZPersistentObject and .dba schema files that work on SQLite, PostgreSQL, MariaDB, MySQL, Oracle and MongoDB.
-
Dynamic properties Updated Markdown page
PHP 8.2 deprecates properties a class does not declare. How the kernel handles them for persistent objects, how to find them in your own classes, and when to declare, use an array, or allow them.
-
Inline CSS to stylesheets Updated Markdown page
Move an old extension's style blocks and style attributes into stylesheet files loaded through design.ini, so the packer bundles them and a Content Security Policy with style-src self does not drop them.
-
Taking inventory of an old extension Updated Markdown page
Find out what an old extension contains and what will need work before you change a line: files, settings, PHP entry points, JavaScript, inline code, database tables, with the commands to list each.
-
Modernizing composer.json Updated Markdown page
Give an old extension a composer.json that installs it into Exponential 6, or bring an old one up to date - PHP constraint, installer, license, authors and support - with the change expchangeclass made for PHP 8.0.
-
Modernizing ezinfo.php and extension.xml Updated Markdown page
Bring an old extension's ezinfo.php and extension.xml up to date - quoted keys, a readable name, the release version, the license, the website and credit for included software - and check what the about page shows.
-
Naming and branding during an upgrade Updated Markdown page
What to rename when you upgrade an old extension and what never to touch: product names in texts, new code with exp, kernel identifiers, folder names, settings - and how to keep credit for the original authors.
-
Nullable parameters and type declarations Updated Markdown page
Fix the most common PHP 8.4 deprecation, implicitly nullable parameters, and add type declarations to old code safely, with examples from expsite_api, expquery_translator and ezfind.
-
Old-style constructors and static calls Updated Markdown page
PHP 8 no longer runs a method named after its class as the constructor, and stops on instance methods called statically. How to find both in an old extension and fix them without breaking code that calls the old names.
-
From old jQuery to jQuery 4 Updated Markdown page
Load the jQuery 4 that ezjscore provides instead of a bundled old copy, and replace the jQuery calls that versions 3 and 4 removed, with the list the layouts editor went through and jQuery Migrate as a safety net.
-
PHP 8.1 to 8.5 deprecations Updated Markdown page
The deprecations each PHP release from 8.1 to 8.5 added that old extension code meets, how they show in the debug output, and the fix for each that still runs on PHP 8.0.
-
PHP 8 errors that stop old code Updated Markdown page
The PHP 8 changes that turn old extension code into fatal errors - bare-word constants, static calls, wrong argument types, count() on null, incompatible signatures - with how to find and fix each one.
-
Removed PHP functions and their replacements Updated Markdown page
The PHP functions old extensions call that PHP 7 and 8 removed - each(), create_function(), ereg(), split(), mysql_*(), magic quotes and others - with a tested replacement for each.
-
Tests and CI for an upgraded extension Updated Markdown page
Keep an upgraded extension upgraded: a lint on every supported PHP, small tests without a database that forbid inline code, and a GitHub Actions workflow, with the xrowextract workflow as a model.
-
The upgrade checklist Updated Markdown page
The whole job of bringing an old extension to Exponential 6 on one page: preparation, PHP, metadata, browser, administration, tests and release, each step with the chapter that explains it.
-
Why most of the changes are small Updated Markdown page
Why an extension written years ago usually needs only small changes for Exponential 6: the extension system, class names and settings stayed, and the changes come from PHP and the browser.
-
From YUI to expui Updated Markdown page
YUI 2 and 3 are gone from Exponential 6.0.15. Find an old extension's YUI code and move it to jQuery and Exponential UI (expui): server calls, dialogs, tables, date pickers and events.
-
Part 5: Extending, forking ethically and contributing back Updated Markdown page
Part 5 of the book: build on other people's extensions fairly - extend without forking, fork when you must, keep credit and licenses right, and give your work back with pull requests, issues and reviews.
-
Adopting an abandoned extension Updated Markdown page
How to tell whether an extension is really abandoned, how to ask its author for maintenance or a hand-over, and how to take it on fairly when nobody answers - with the steps and the notices to keep.
-
Attribution and copyright notices Updated Markdown page
Where credit goes in an extension - file headers, license files, ezinfo.php Includes, composer.json authors, README credits, Git history - and how to add your name without removing anyone else's.