spatie/macroable

一个用于动态向类添加方法的特性

2.0.0 2021-03-26 22:39 UTC

This package is auto-updated.

Last update: 2024-09-06 09:58:20 UTC


README

一个用于动态向类添加方法的特性

Latest Version on Packagist run-tests Total Downloads

此包提供了一个特性,当应用于类时,可以在运行时向该类添加方法。

以下是一个快速示例

$myClass = new class() {
    use Spatie\Macroable\Macroable;
};

$myClass::macro('concatenate', function(... $strings) {
   return implode('-', $strings);
});

$myClass->concatenate('one', 'two', 'three'); // returns 'one-two-three'

可宏特性及其实现的想法来自Laravel 框架的 macroable 特性

支持我们

我们投入大量资源创建了一流的开放源代码包。您可以通过购买我们的付费产品之一来支持我们。

我们非常欢迎您从家乡寄来明信片,说明您正在使用我们的哪个包。您可以在我们的联系页面找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上

安装

您可以通过 composer 安装此包

composer require spatie/macroable

用法

您可以使用 macro 向类添加新方法

$macroableClass = new class() {
    use Spatie\Macroable\Macroable;
};

$macroableClass::macro('concatenate', function(... $strings) {
   return implode('-', $strings);
});

$macroableClass->concatenate('one', 'two', 'three'); // returns 'one-two-three'

传递给 macro 函数的可调用对象将被绑定到 class

$macroableClass = new class() {
    
    protected $name = 'myName';
    
    use Spatie\Macroable\Macroable;
};

$macroableClass::macro('getName', function() {
   return $this->name;
};

$macroableClass->getName(); // returns 'myName'

您还可以通过使用混合类一次性添加多个方法。混合类包含返回可调用的方法。混合类中的每个方法都将注册到可宏类上。

$mixin = new class() {
    public function mixinMethod()
    {
       return function() {
          return 'mixinMethod';
       };
    }
    
    public function anotherMixinMethod()
    {
       return function() {
          return 'anotherMixinMethod';
       };
    }
};

$macroableClass->mixin($mixin);

$macroableClass->mixinMethod() // returns 'mixinMethod';

$macroableClass->anotherMixinMethod() // returns 'anotherMixinMethod';

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

测试

composer test

贡献

有关详细信息,请参阅CONTRIBUTING

安全

如果您发现有关安全性的错误,请通过电子邮件发送至 [email protected],而不是使用问题跟踪器。

明信片软件

您可以使用此包(它是MIT 许可的),但如果它进入您的生产环境,我们非常欢迎您从家乡寄来明信片,说明您正在使用我们的哪个包。

我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。

我们将所有收到的明信片发布在我们的公司网站上

致谢

想法和代码来自Laravel 框架的 macroable 特性

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件