Skip to content

Fix PHP 8.4 and 8.5 deprecations#229

Open
austinderrick wants to merge 2 commits into
wintercms:wip/1.3from
austinderrick:fix/php-8.5-deprecations
Open

Fix PHP 8.4 and 8.5 deprecations#229
austinderrick wants to merge 2 commits into
wintercms:wip/1.3from
austinderrick:fix/php-8.5-deprecations

Conversation

@austinderrick
Copy link
Copy Markdown

@austinderrick austinderrick commented Jun 2, 2026

Summary

Fixes the PHP 8.4 and 8.5 deprecations.

Fixes

  • PHP 8.5 — null as array offset (Using null as an array offset is deprecated, use an empty string instead):
    • src/Config/Repository.phpafterLoad[$namespace] (read/isset/write) now uses $namespace ?? '' (a null/global namespace is a valid case). (This is the one reported.)
    • src/Halcyon/Processors/Processor.php$items[$fileName] / [$fileName => …] now uses $fileName ?? '' (array_get($result, 'fileName') may return null).
  • PHP 8.4 — implicit-nullable parameter:
    • src/Console/Traits/ProcessesQuery.phpint $limit = null?int $limit = null.
  • PHP 8.1+ (also deprecated on 8.5), removed in PHP 9 — strftime():
    • src/Html/FormBuilder.php::selectMonth() — replaced strftime() with date(); the $format default changes from '%B' to 'F' (date() syntax). Default output (full month names) is unchanged; callers passing custom strftime-style formats must switch to date() syntax.
  • Test fix (for green CI): tests/Scheduling/ScheduleListCommandTest — updated the invokable-class schedule:list expectation (modern Laravel renders the bare class name without the Closure at: prefix). This was a pre-existing failure on wip/1.3 unrelated to the deprecations.

Testing

  • vendor/bin/phpunit on PHP 8.5.5: 711 tests, 0 failures, 0 Storm-source PHP deprecations.
  • vendor/bin/phpunit on PHP 8.4.14: 711 tests, 0 failures, 0 Storm-source PHP deprecations.
  • phpcs: clean on the changed files.

Out of scope

  • vendor/assetic/framework triggers a $http_response_header deprecation on 8.5 — that's a third-party dependency, not Storm.
  • PHPStan currently reports pre-existing errors on wip/1.3 (a larastan-version drift, in the relation generics / baseline) that are unrelated to this PR; they are addressed for the Laravel 13 line in Support Laravel 13 #228.

- Config\Repository: use '' rather than a null $namespace as the afterLoad array
  offset (PHP 8.5 'Using null as an array offset is deprecated').
- Halcyon\Processors\Processor: same for the fileName offset (array_get may return null).
- Console\Traits\ProcessesQuery: explicit ?int $limit (PHP 8.4 implicit-nullable param).
- Html\FormBuilder::selectMonth: replace deprecated strftime() with date() (default 'F').
- tests: update ScheduleListCommandTest invokable-class schedule:list expectation to match
  current Laravel 12.x rendering (pre-existing failure on wip/1.3, unrelated to the above).
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 2, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ce75e25a-ea70-4b68-b123-c2c0149638a4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@LukeTowers
Copy link
Copy Markdown
Member

@austinderrick can you submit fixes to assetic/framework as well? We maintain that library.

Comment thread src/Config/Repository.php Outdated
Comment thread src/Config/Repository.php Outdated
Comment thread src/Config/Repository.php Outdated
Comment thread src/Halcyon/Processors/Processor.php Outdated
Comment thread src/Halcyon/Processors/Processor.php Outdated
Comment thread src/Html/FormBuilder.php
@LukeTowers LukeTowers added this to the 1.3.0 milestone Jun 3, 2026
@LukeTowers LukeTowers added the needs response Issues/PRs where a maintainer is awaiting a response from the submitter label Jun 3, 2026
Replaces the null-coalescing offset fixes with proper argument types and
explicit null guards, per review feedback on wintercms#229:

- Config\Repository: type load()/callAfterLoad()/afterLoading() namespace
  params (?string/string) and guard $namespace !== null before the afterLoad
  lookup, rather than coercing null to an empty-string key.
- Halcyon\Processor: return null early (processSelectOne) and skip the record
  (processSelect) when a result has no fileName, instead of bucketing under an
  empty key, which also prevents records colliding on ''.
- Form facade: sync the selectMonth @method default to 'F' and correct the
  drifted selectRange annotation.
@austinderrick
Copy link
Copy Markdown
Author

@austinderrick can you submit fixes to assetic/framework as well? We maintain that library.

Oh, perfect! Submitted! Just a few over there: assetic-php/assetic#47

@austinderrick austinderrick requested a review from LukeTowers June 4, 2026 23:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs response Issues/PRs where a maintainer is awaiting a response from the submitter

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants