Skip to content

ghostwriter/handrail

Repository files navigation

Handrail

Automation Supported PHP Version GitHub Sponsors Code Coverage Type Coverage Psalm Level Latest Version on Packagist Downloads

Safeguard your PHP code by wrapping function declarations in if (!function_exists()) blocks.

Ensures that functions are only declared if they do not already exist, preventing redeclaration conflicts.

Star ⭐️ this repo if you find it useful

You can also star (🌟) this repo to find it easier later.

Installation

You can install the package via composer:

composer require ghostwriter/handrail

Example

Before running Handrail:

<?php

function exampleFunction() {
    // some code
}

function anotherFunction() {
    // more code
}

After running Handrail:

<?php

if (!function_exists('exampleFunction')) {
    function exampleFunction() {
        // some code
    }
}

if (!function_exists('anotherFunction')) {
    function anotherFunction() {
        // more code
    }
}

Configuration

To configure the paths or files to scan, create a composer extra configuration in your composer.json:

{
    "extra": {
        "ghostwriter/handrail": {
            "disable": false,
            "packages": [
                "vendor/package"
            ],
            "files": [
                "vendor/amphp/amp/src/functions.php",
                "relative/path/to/file.php"
            ]
        }
    }
}
  • disable: (default: false) A boolean flag to enable or disable Handrail.
  • files: (default: []) An array of files to scan for function declarations.

Usage

Automatic Execution

After installing and configuring Handrail, we will automatically hook into Composer’s lifecycle events (post-install-cmd and post-update-cmd) after Composer installs or updates packages.

composer install
composer update

Manual Execution

You can also run Handrail manually using the following Composer command:

composer handrail

Advanced Usage

Running Handrail Programmatically

Handrail provides an API for programmatic execution within PHP scripts:

use Ghostwriter\Handrail\Handrail;

Handrail::new()->guard($phpFile);

Credits

Thanks

Changelog

Please see CHANGELOG.md for more information on what has changed recently.

License

Please see LICENSE for more information on the license that applies to this project.

Security

Please see SECURITY.md for more information on security disclosure process.