drewlabs / overloadable
为PHP语言提供函数重载功能。这是一个实验性特性,因为它可能并不适用于所有使用场景。
v0.3.0
2024-03-21 18:56 UTC
Requires
- php: ^7.2|^8.0
- symfony/polyfill-php81: ^1.24
Requires (Dev)
- phpunit/phpunit: ^9.5
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