<?php /** * This file is part of the Carbon package. * * (c) Brian Nesbitt <brian@nesbot.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Carbon\Traits; /** * Trait Macros. * * Allows users to register macros within the Carbon class. */ trait Macro { use Mixin; /** * The registered macros. * * @var array */ protected static $globalMacros = []; /** * The registered generic macros. * * @var array */ protected static $globalGenericMacros = []; /** * Register a custom macro. * * @example * ``` * $userSettings = [ * 'locale' => 'pt', * 'timezone' => 'America/Sao_Paulo', * ]; * Carbon::macro('userFormat', function () use ($userSettings) { * return $this->copy()->locale($userSettings['locale'])->tz($userSettings['timezone'])->calendar(); * }); * echo Carbon::yesterday()->hours(11)->userFormat(); * ``` * * @param string $name * @param object|callable $macro * * @return void */ public static function macro($name, $macro) { static::$globalMacros[$name] = $macro; } /** * Remove all macros and generic macros. */ public static function resetMacros() { static::$globalMacros = []; static::$globalGenericMacros = []; } /** * Register a custom macro. * * @param object|callable $macro * @param int $priority marco with higher priority is tried first * * @return void */ public static function genericMacro($macro, $priority = 0) { if (!isset(static::$globalGenericMacros[$priority])) { static::$globalGenericMacros[$priority] = []; krsort(static::$globalGenericMacros, SORT_NUMERIC); } static::$globalGenericMacros[$priority][] = $macro; } /** * Checks if macro is registered globally. * * @param string $name * * @return bool */ public static function hasMacro($name) { return isset(static::$globalMacros[$name]); } /** * Get the raw callable macro registered globally for a given name. * * @param string $name * * @return callable|null */ public static function getMacro($name) { return static::$globalMacros[$name] ?? null; } /** * Checks if macro is registered globally or locally. * * @param string $name * * @return bool */ public function hasLocalMacro($name) { return ($this->localMacros && isset($this->localMacros[$name])) || static::hasMacro($name); } /** * Get the raw callable macro registered globally or locally for a given name. * * @param string $name * * @return callable|null */ public function getLocalMacro($name) { return ($this->localMacros ?? [])[$name] ?? static::getMacro($name); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Boundaries.php | File | 11.04 KB | 0644 |
|
Cast.php | File | 1.06 KB | 0644 |
|
Comparison.php | File | 34.63 KB | 0644 |
|
Converter.php | File | 14.84 KB | 0644 |
|
Creator.php | File | 30.37 KB | 0644 |
|
Date.php | File | 161.43 KB | 0644 |
|
DeprecatedProperties.php | File | 1.57 KB | 0644 |
|
Difference.php | File | 52.91 KB | 0644 |
|
IntervalRounding.php | File | 1.54 KB | 0644 |
|
IntervalStep.php | File | 2.29 KB | 0644 |
|
Localization.php | File | 28.59 KB | 0644 |
|
Macro.php | File | 3.02 KB | 0644 |
|
MagicParameter.php | File | 721 B | 0644 |
|
Mixin.php | File | 4.58 KB | 0644 |
|
Modifiers.php | File | 13.44 KB | 0644 |
|
Mutability.php | File | 1.3 KB | 0644 |
|
ObjectInitialisation.php | File | 422 B | 0644 |
|
Options.php | File | 12.78 KB | 0644 |
|
Rounding.php | File | 7.54 KB | 0644 |
|
Serialization.php | File | 8.29 KB | 0644 |
|
Test.php | File | 7.56 KB | 0644 |
|
Timestamp.php | File | 6.44 KB | 0644 |
|
ToStringFormat.php | File | 1.43 KB | 0644 |
|
Units.php | File | 11.89 KB | 0644 |
|
Week.php | File | 7.22 KB | 0644 |
|