Skip to content

exercism/php

Repository files navigation

Exercism PHP Track

Exercism exercises in PHP

Follow these instructions to contribute to the PHP track. To solve the exercises, head to the PHP track and check the documentation.

Install Dependencies

The following system dependencies are required:

Run the following command to get started with this project:

composer install # Required dependencies to develop this track

Running Exercism resources management

bin/configlet is the official tool for managing Exercism language track repositories. See Building Exercism docs.

For convenience, you can use composer configlet:fmt to fix formatting issues in the Exercism track files. This is included in composer ci to run the CI checks locally.

Running Unit Test Suite

The tests are run with PHPUnit. A shell loop injecting exemplar.php is provided to ease testing.

Execute the following command to run the tests:

composer test:run

This is included in composer ci to run the CI checks locally.

Run a specific test

If you want to run tests for one specific exercise, you can do it with following cli command.

composer test:run -- exercise-name
# e.g
composer test:run -- book-store

If you want to run all starting with let's say 'b' you can run

composer test:run -- "b*"

Running Style Checker

This project uses a slightly modified version of PSR-12. Use the following commands to apply code style:

composer lint:check # Checks the files against the code style rules
composer lint:fix # Automatically fix code style issues

The lint:check is included in composer ci to run the CI checks locally.

Contributing

  • Read the documentation at Exercism.
  • Follow the PSR-12 coding style (Exercisms PHP track uses a slightly modified version of PSR-12).
  • Run composer ci to run CI checks locally before pushing.
  • CI is run on all pull requests, it must pass the required checks for merge.
  • CI is running all tests on PHP 8.0 to PHP 8.2 for Linux, Windows and MacOS.

Generating new practice exercises

Use bin/configlet create --practice-exercise <slug> to create the exercism resources required. This provides you with the directories and files in exercises/practice/<slug>. Look into tests.toml for which test cases not to implement / generate and mark them with include = false.

Test generator MVP used like this:

composer -d contribution/generator install
contribution/generator/bin/console app:create-tests '<slug>'
composer lint:fix