zxhxx 28c48ed8ee 1 | 2 gadi atpakaļ | |
---|---|---|
.. | ||
config | 2 gadi atpakaļ | |
src | 2 gadi atpakaļ | |
.styleci.yml | 2 gadi atpakaļ | |
CHANGELOG.md | 2 gadi atpakaļ | |
CONTRIBUTING.md | 2 gadi atpakaļ | |
LICENSE.md | 2 gadi atpakaļ | |
README.md | 2 gadi atpakaļ | |
composer.json | 2 gadi atpakaļ |
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 the Laravel framework.
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, Samberstraat 69D, 2060 Antwerp, Belgium.
We publish all received postcards on our company website.
You can install the package via composer:
composer require spatie/macroable
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);
};
$myClass->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 my 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 'mixinMethod';
}
public function anotherMixinMethod()
{
return 'anotherMixinMethod';
}
};
$macroableClass->mixin($mixin);
$macroableClass->mixinMethod() // returns 'mixinMethod';
$macroableClass->anotherMixinMethod() // returns 'anotherMixinMethod';
Please see CHANGELOG for more information what has changed recently.
composer test
Please see CONTRIBUTING for details.
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.
Idea and code is taken from the macroable
trait of the the Laravel framework.
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.
The MIT License (MIT). Please see License File for more information.