PHP教程

PHP Componere

PHP Componere是一个功能强大的库,用于在运行时对类进行组合、猴子补丁和类型转换。它旨在用于生产环境,提供了一组简单而灵活的API。本篇教程主要介绍了Componere的功能以及各种条件下的使用方法。

一、概述

Componere的主要功能包括:

1、组合(Composition):使用Componere\Definition可以在运行时定义或重新定义一个类。通过定义新的类,它可以替换原始类,并在注册后可供使用。

2、猴子补丁(Monkey Patching):使用Componere\Patch可以在运行时更改特定对象实例的类。补丁可以保持应用状态,并可以显式地还原。

注:这个叫法起源于Zope框架,大家在修正Zope的Bug的时候经常在程序后面追加更新部分,这些被称作是“杂牌军补丁(guerilla patch)”,后来guerilla就渐渐的写成了gorllia((猩猩),再后来就写了monkey(猴子),所以猴子补丁的叫法是这么莫名其妙的得来的。

3、类型转换(Casting):Componere提供了一组函数,可以在用户定义的兼容类型之间进行类型转换。这些函数可以将对象转换为指定的类型,前提是类型是对象类型的子类型或超类型。

二、Componere\Abstract\Definition

Componere\Abstract\Definition类代表了一个类的入口,程序员不应该使用它。

类摘要:

final abstract class Componere\Abstract\Definition {
/* 方法 */
public addInterface(string $interface): Definition
public addMethod(string $name, Componere\Method $method): Definition
public addTrait(string $trait): Definition
public getReflector(): ReflectionClass
}

这个类是Componere库中的一个抽象类,它提供了一些方法来定义和操作类。然而,这个类是最终抽象类,意味着程序员不能直接使用它,而是通过其他具体的类来进行类的定义和操作。

这个类具有以下方法:

  • addInterface(string $interface): Definition:向类定义中添加一个接口,并返回Componere\Abstract\Definition实例。这个方法用于给类定义添加接口;
  • addMethod(string $name, Componere\Method $method): Definition:向类定义中添加一个方法,并返回Componere\Abstract\Definition实例。这个方法用于给类定义添加方法;
  • addTrait(string $trait): Definition:向类定义中添加一个特征(trait),并返回Componere\Abstract\Definition实例。这个方法用于给类定义添加特征;
  • getReflector(): ReflectionClass:获取类定义的反射类(ReflectionClass)实例。这个方法用于获取类定义的反射信息,可以用于进一步的类操作和分析。

三、Componere\Definition

定义类允许程序员在运行时构建和注册一个类型。如果一个定义替换了一个现有的类,那么当该定义被销毁时,现有的类将被恢复。

类摘要:

final class Componere\Definition extends Componere\Abstract\Definition {
/* Constructors */
public __construct(string $name)
public __construct(string $name, string $parent)
public __construct(string $name, array $interfaces)
public __construct(string $name, string $parent, array $interfaces)
/* 方法 */
public addConstant(string $name, Componere\Value $value): Definition
public addProperty(string $name, Componere\Value $value): Definition
public register(): void
public isRegistered(): bool
public getClosure(string $name): Closure
public getClosures(): array
/* 继承的方法 */
public Componere\Abstract\Definition::addInterface(string $interface): Definition
public Componere\Abstract\Definition::addMethod(string $name, Componere\Method $method): Definition
public Componere\Abstract\Definition::addTrait(string $trait): Definition
public Componere\Abstract\Definition::getReflector(): ReflectionClass
}

四、Componere\Patch

Patch 类允许程序员在运行时更改实例的类型,而无需注册新的定义。

当补丁程序被销毁时,它将被还原,因此在补丁程序生命周期内打过补丁的实例将恢复到它们的正式类型。

类摘要:

final class Componere\Patch extends Componere\Abstract\Definition {
/* Constructors */
public __construct(object $instance)
public __construct(object $instance, array $interfaces)
/* 方法 */
public apply(): void
public revert(): void
public isApplied(): bool
public derive(object $instance): Patch
public getClosure(string $name): Closure
public getClosures(): array
/* 继承的方法 */
public Componere\Abstract\Definition::addInterface(string $interface): Definition
public Componere\Abstract\Definition::addMethod(string $name, Componere\Method $method): Definition
public Componere\Abstract\Definition::addTrait(string $trait): Definition
public Componere\Abstract\Definition::getReflector(): ReflectionClass
}

五、Componere\Method

Componere\Method表示一个具有可修改可访问性标志的函数。

类摘要:

final class Componere\Method {
/* Constructor */
public __construct(Closure $closure)
/* 方法 */
public setPrivate(): Method
public setProtected(): Method
public setStatic(): Method
public getReflector(): ReflectionMethod
}

六、Componere\Value

Componere\Value代表所有类型的 PHP 变量,包括未定义的。

类摘要:

final class Componere\Value {
/* Constructor */
public __construct( $default = ?)
/* 方法 */
public setPrivate(): Value
public setProtected(): Value
public setStatic(): Value
public isPrivate(): bool
public isProtected(): bool
public isStatic(): bool
public hasDefault(): bool
}

七、Componere函数

1、Componere\cast

Componere\cast(Type $type, $object): Type

Componere\cast(Type $type, $object)是Componere库中的一个函数,用于将给定的对象强制转换为指定的类型。

  • $type:要转换为的类型,必须是一个Type对象;
  • $object:要转换的对象,可以是任何类型。

2、Componere\cast_by_ref

Componere\cast_by_ref(Type $type, $object): Type

  • $type:用户定义的类型;
  • $object:用户定义的类型与类型兼容的对象。
广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录