grikdotnet/z-unfinal
最新稳定版本:v1.0
Composer 安装命令:
composer require grikdotnet/z-unfinal
包简介
Library allows converting final classes to non-final, abstract to non-abstract, and adding traits
README 文档
README
This is a partial fork of the z-engine library, compatibile with PHP 8.4.
This package allows you to:
- Extend final classes
- Create instances of abstract classes
- Add traits to existing classes dynamically
Intended Use Cases
- Unit Testing:
- Mock or extend classes declared as
finalorabstractin your tests. - Enable mocking frameworks to work with classes that would otherwise be unmockable.
- Mock or extend classes declared as
- Dynamic Trait Injection:
- Augment class functionality for testing
- Implement behaviors such as "friendly" classes that access each other's protected methods.
Installation
composer require --dev grikdotnet/z-unfinal
Examples:
Extend a final class
use ZEngine\Core; use ZEngine\Reflection\ReflectionClass; Core::init(); // Get reflection for a final class $reflectionClass = new ReflectionClass(FinalClass::class); // Remove the final flag $reflectionClass->setFinal(false); // Now you can extend the class in your tests class ExtendedClass extends FinalClass { // Test-specific functionality }
Create an instance of an abstract class
use ZEngine\Core; use ZEngine\Reflection\ReflectionClass; Core::init(); $reflectionClass = new ReflectionClass(AbstractClass::class); $reflectionClass->setAbstract(false); // Now you can create an instance of the abstract class $instance = new AbstractClass();
Dynamically Add Traits to a Class
use ZEngine\Core; use ZEngine\Reflection\ReflectionClass; Core::init(); $reflectionClass = new ReflectionClass(TargetClass::class); $reflectionClass->addTraits(SomeTrait::class); // Now TargetClass has all methods from SomeTrait (new TestClass())->traitMethod()
License
MIT. See LICENSE for details.
Original project: lisachenko/z-engine
Pre-requisites and initialization
- PHP 8 or higher, x64 non-thread-safe version
- FFI extension enabled
- To use in fcgi mode, call
Core::preload()in your script specified byopcache.preload. Checkpreload.phpfor an example.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-07-14