apishka / easy-extend
PHP类扩展实现的简单库
2.1.1
2019-11-25 10:59 UTC
Requires
- php: >=7.1.0
- composer-plugin-api: ^1.0.0
- symfony/console: ^2.7 || ^3.0 || ^4.0 || ^5.0
- symfony/finder: ^2.7 || ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- apishka/cs: ^1.0.0
- composer/composer: dev-master@dev
- phpstan/phpstan: ^0.11
- phpunit/phpunit: ^8.3.
README
什么是easy-extend?
这是一个composer组件,帮助开发者编写通用库并在项目中扩展它们。
快速开始
- 将easy-extend添加到库的composer需求中
"require": { "apishka/easy-extend": "^1.0.0" }
- 创建
.apishka.php
(结构文档)。最常见的文件如下所示
<?php return array( 'easy-extend' => array( 'finder' => function($finder) { $finder ->in('source/') ->files() ->name('*.php') ; return $finder; } ), );
- 运行
composer update
- 实现你想要轻松扩展的类的特质。
如何扩展?
扩展类
某些库已经有了你想要扩展的类的基本实现,并且该库实现了EasyExtend
class Library_User_Implementation { /** * We have to include trait */ use Apishka\EasyExtend\Helper\ByClassNameTrait; }
为了扩展这个类而不重写任何库代码,或者检查新用户类应该在哪个类中扩展,你需要做的是扩展该类
class My_Library_User_Implementation extends Library_User_Implementation { }
你需要做的是使用以下方式创建类的实例
Library_User_Implementation::apishka(); // instanceof My_Library_User_Implementation
所有库都可以根据你自定义项目的需求轻松扩展。无需要求大量的代码。
##项目路由 创建路由并实现两个方法
class My_Library_ItemsRouter extends \Apishka\EasyExtend\Router\ByKeyAbstract { protected function isCorrectItem(\ReflectionClass $reflector) { return $reflector->isSubclassOf('My_Library_ItemsInterface'); } protected function getClassVariants(\ReflectionClass $reflector, $item) { return $item->getAliases(); } }
创建项目
class My_Library_ItemApple implements My_Library_ItemsInterface { public function getAliases() { return array( 'apple', 'red_apple', ); } }
现在你可以通过别名获取类
var_dump( get_class(My_Library_ItemsRouter::apishka()->getItem('apple') ); // My_Library_ItemApple var_dump( get_class(My_Library_ItemsRouter::apishka()->getItem('red_apple') ); // My_Library_ItemApple
你也可以扩展你的项目
class My_Library_ItemRedApple extends My_Library_ItemApple { } // after ./vendor/bin/easy-extend var_dump( get_class(My_Library_ItemsRouter::apishka()->getItem('apple') ); // My_Library_ItemRedApple