0.01
PHP 8.1+
Low commit activity in last 18 months
Set of short PHP helpers
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

phpstan/phpstan
^1.12
squizlabs/php_codesniffer
^3.7
phpunit/phpunit
^10.5
 Project Readme

Set of short PHP helpers

  • Exceptions
    • CouldNotProcessData template
    • NotImplemented
  • HasRequirements trait
  • Testing
    • IlluminateDatabase helper
    • MarkdownFileTest interface + trait

Exceptions

Template for an exception that indicates that the data could not be processed.

interface ImageResizerException extends Throwable {}

final class ImageResizerCouldNotResizeImage extends PetrKnap\Shorts\Exception\CouldNotProcessData implements ImageResizerException {}

final class ImageResizer {
    public function resize(string $image) {
        throw new ImageResizerCouldNotResizeImage(__METHOD__, $image);
    }
}

Simple exception for prototyping purposes.

final class StringablePrototype implements Stringable {
    public function __toString(): string {
        PetrKnap\Shorts\Exception\NotImplemented::throw(__METHOD__);
    }
}

Simple trait to check if requirements of your code are fulfilled.

final class ServiceWithRequirements {
    use PetrKnap\Shorts\HasRequirements;
    
    public function __construct() {
        self::checkRequirements(functions: ['required_function']);
    }

    public function do(): void {
        required_function();
    }
}

It should not replace Composers requires, but it could improve them and check suggests.

Testing

Simple helper which provides logic to test Illuminate\Database without Laravel mess.

$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE tigers (id INTEGER PRIMARY KEY, name VARCHAR)');
$pdo->prepare('INSERT INTO tigers (name) VALUES (?), (?), (?)')
    ->execute(['Roque', 'Jasper', 'Gopal']);

PetrKnap\Shorts\Testing\IlluminateDatabase::createCapsuleManager($pdo)
    ->bootEloquent();

class Tiger extends Illuminate\Database\Eloquent\Model {}

assert(Tiger::count() === 3);

The interface and trait let you automatically test code examples in a Markdown file like README.md.

final class ReadmeTest extends PHPUnit\Framework\TestCase implements PetrKnap\Shorts\PhpUnit\MarkdownFileTestInterface {
    use PetrKnap\Shorts\PhpUnit\MarkdownFileTestTrait;

    public static function getPathToMarkdownFile(): string {
        return __DIR__ . '/../README.md';
    }

    public static function getExpectedOutputsOfPhpExamples(): array {
        return [
            'some example' => 'has this output',
        ];
    }
}

By specifying the file path and expected outputs, the trait runs each code block and checks that its output matches, keeping documentation examples correct and up‑to‑date.


Run composer require petrknap/shorts to install it. You can support this project via donation. The project is licensed under the terms of the LGPL-3.0-or-later.