PHP development
PHP development on Exponential: the kernel, classes, autoloads, the command line, Composer, tests and coding standards.
55 pages
- The debug bar for PHP developers Using the Exp Debug bar as a PHP developer - the tabs (Messages, Settings, Cache, Timing, SQL, Templates, Included files, Memory, Rendering, User, Server), the summary thresholds, changing debug settings with undo, and…
- Logs, the log viewer and request logs The log files a PHP developer reads and writes - error.log, warning.log, deprecated.log, 404.log, security.log and your own via eZLog::write() - the log viewer in Setup > Logs and on the command line with explogs.php…
- Profiling PHP code Measuring and speeding up PHP code in Exponential - exp:benchmark for pages, kernel probes and micro benchmarks, eZDebug accumulators around your own code, the debug bar's SQL and memory figures, the OPcache profile…
- OPcache and cache preloading Two different kinds of "preloading" a PHP developer meets in Exponential - the opcode cache (OPcache) and the settings that matter under PHP-FPM and Velocity, and the site cache preloader bin/php/preload.php…
- The engine archive (phar) for PHP developers What the optional engine archive dist/engine.phar means for PHP code - which directories it holds, how it is switched on, why code must never compute the installation root from __DIR__, how rebuilds work and refuse…
- Velocity persistent workers for PHP developers What changes for PHP code when Exponential runs under Velocity, the recommended application server - workers that boot once and serve many requests, the warm-up, what the kernel resets between requests, per-request…
- Static state traps An explanation of the bugs that come from state kept between requests or tests - function statics, register-once flags, statics assigned outside the class body, per-request caches keyed by time, settings and singletons…
- The kernel service container How PHP code asks the kernel for shared objects by name (expKernelServices::get()), how to define a service in kernelservices.ini with a class or factory, arguments, a scope and tags, what worker, request and prototype…
- FrankenPHP for PHP developers What a PHP developer needs to know when Exponential is served by FrankenPHP through exp:velocity - classic mode with a clean state per request, why worker mode is not offered, the embedded PHP and its ini settings, the…
- Composer for PHP developers How Exponential uses Composer - the root composer.json with PHP 8.0 to 8.5 (PHP 7.4 usable without support), required extensions and packages, the legacy-scripts hook that regenerates autoloads, the installer plugin…
- Contributing PHP changes How a PHP change reaches the Exponential kernel - the contributor license agreement, fork and branch, the checks to run before a pull request, commit messages, tests, the file manifest, review rounds, squashing and…
- Checklists for PHP developers Copyable checklists for PHP work on Exponential - before you write, for every PHP file, for a new class, a view, a command or cronjob part, a datatype or workflow event, security, Velocity compatibility, tests, a commit…
- PHP developer FAQ Short answers to the questions PHP developers ask most about Exponential - PHP versions, PSR-4 and namespaces, type declarations, class not found, settings not applied, edits that do nothing under Velocity, databases…
- Glossary for PHP developers The terms a PHP developer meets in Exponential code and documentation, from accumulator and append.php to worker and zygote, each with a one-line meaning and the page or file that explains it.
- Static publishing from the command line and CI For software engineers and PHP developers - build, check and publish a static copy with the exp:static:* commands, read their JSON output, and run it in GitHub Actions from the starter template.
Documentation license
This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.
Exponential Copyright © 1998-2026 Exponential Foundation and 7x