Macroable
A trait to dynamically add methods to a class
#A trait to dynamically add methods to a class
This package provides a trait that, when applied to a class, makes it possible to add methods to that class at runtime.
Here's a quick example:
$myClass = new class() { use Spatie\Macroable\Macroable; }; $myClass::macro('concatenate', function(... $strings) { return implode('-', $strings); }); $myClass->concatenate('one', 'two', 'three'); // returns 'one-two-three'
The idea of a macroable trait and the implementation is taken from the macroable trait of the Laravel framework.
#Support us
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.
#Installation
You can install the package via composer:
composer require spatie/macroable
#Usage
You can add a new method to a class using 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'
Callables passed to the macro function will be bound to the class
$macroableClass = new class() { protected $name = 'myName'; use Spatie\Macroable\Macroable; }; $macroableClass::macro('getName', function() { return $this->name; }; $macroableClass->getName(); // returns 'myName'
You can also add multiple methods in one go by using a mixin class. A mixin class contains methods that return callables. Each method from the mixin will be registered on the macroable class.
$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
Please see CHANGELOG for more information on what has changed recently.
#Testing
composer test
#Contributing
Please see CONTRIBUTING for details.
#Security
If you've found a bug regarding security please mail security@spatie.be instead of using the issue tracker.
#Postcardware
You're free to use this package (it's MIT-licensed), but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.
Our address is: Spatie, Kruikstraat 22, 2018 Antwerp, Belgium.
We publish all received postcards on our company website.
#Credits
Idea and code is taken from the macroable trait of the Laravel framework.
#License
The MIT License (MIT). Please see License File for more information.
