Skip to main content

Changelog - Version 7.0

Status: in development. This document tracks changes landing on the 7.0 branch. Nothing here is released yet, and the contents may still change.

Breaking Changes​

  • FeatureFlagSelector::whenFlagIs() no longer matches a flag added without a value (FeatureFlags::addFlag('flag'), value null). It matches the exact value only, as documented; use whenFlagIsSet() for a flag without a value. isMatch($flagName) called without a value now returns false for a whenFlagIs() selector.
  • #[FeatureFlagAttribute('flag', '0')] (and '') now requires that exact value. It was treated as "flag is set" and matched any value.

Bug Fixes​

  • FeatureFlagDispatcher::addClass() registered private and protected static methods carrying #[FeatureFlagAttribute], which then failed with "Call to private method" on dispatch. Only public methods are registered now, as documented.
  • FeatureFlagSelector::whenFlagIs() matched a flag that has no value (null).
  • FeatureFlagDispatcher::addClass() used empty() on the attribute value, so '0' meant "flag is set". It now checks for null.

Requirements​

  • PHP 8.3, 8.4, 8.5 and 8.6 are now supported: "php": ">=8.3 <8.7". The previous <8.6 upper bound excluded PHP 8.6, since <8.6 is exclusive.

Toolchain​

  • PHPUnit updated to ^12.5.

  • Psalm is installed as psalm/phar (^6.16) instead of vimeo/psalm.

    vimeo/psalm lists the PHP versions it supports and no published release includes 8.6, so as a dev dependency it made composer install fail on the 8.6 build job before any test ran. psalm/phar requires only php ^8.2 and bundles its own dependencies, so it installs on every PHP version in the matrix and cannot conflict with the project's. Psalm itself still refuses to run on 8.6, which is why the Psalm job uses 8.5. composer psalm runs it.

    PHPUnit 13 is deliberately not used. It requires PHP >=8.4.1, which would break the 8.3 floor.

Continuous Integration​

  • The build matrix now includes PHP 8.6.
  • The Psalm job now runs on PHP 8.5. Psalm declares ~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0 and therefore does not run on PHP 8.6.

Housekeeping​

  • phpunit.xml.dist renamed to phpunit.xml.