drewlabs/overloadable

为PHP语言提供函数重载功能。这是一个实验性特性,因为它可能并不适用于所有使用场景。

v0.3.0 2024-03-21 18:56 UTC

This package is auto-updated.

Last update: 2024-09-21 19:58:22 UTC


README

PHP库,为PHP类定义提供面向对象的方法重载。它利用PHP反射API的强大功能来查找和调用重载方法。

注意 该实现是实验性的,因为它可能并不适用于所有使用场景,并且当提供多个重载方法时,可能会对您的应用程序性能造成负面影响。

安装

将包包含到您项目中的推荐方法是使用PHP composer包管理器。

在您的项目或库根目录的composer.json文件中添加以下内容

{
    // ...
    "require": {
        "drewlabs/overloadable": "^0.1.0"
    }
    // ...
}

使用方法

  • 内联方法重载
// ...
use Drewlabs\Overloadable\Overloadable;

class TestClass
{
    use Overloadable;

    public function log(...$args)
    {
        return $this->overload($args, [
            static function (ConsoleLogger $logger) {
                return $logger->log();
            },
            static function (FileLogger $logger, ?string $prefix = null) {
                return $logger->log($prefix ?? 'ERROR024');
            },
        ]);
    }
}
  • 类方法重载
// ...
use Drewlabs\Overloadable\Overloadable;

class TestClass
{
    use Overloadable;

    public function log(...$args)
    {
        return $this->overload($args, [
            'log1',
            'log2'
        ]);
    }

    private function log1(ConsoleLogger $logger) 
    {
        return $logger->log();
    }

    private function log2(FileLogger $logger, ?string $prefix = null) 
    {
        return $logger->log($prefix ?? 'ERROR024');
    }
}

完成库安装后,为了使用可重载的实现,请将composer自动加载文件包含到您的项目入口脚本中。以下示例假设您的项目入口脚本为index.php

// index.php
// Load composer autoloaded php scripts using PSR4 implementation
require_once __DIR__ 'vendor/autoload.php';

// Calling the overloaded methods
$object = new TestClass();

$object->log(new FileLogger); // Call the overload that accept an instance of FileLogger as 1st parameter
$object->log(new ConsoleLogger); // Call the overload that accept an instance of ConsoleLogger as 1st parameter

$object->log(new ConsoleLogger, 'ERROR CODE 2308'); // Throws execption as there is no overloaded function that matches