. namespace core\attribute; /** * Attribute to describe a deprecated item. * * @package core * @copyright 2023 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ #[\Attribute] class deprecated { /** * A deprecated item. * * This attribute can be applied to any function, class, method, constant, property, enum, etc. * * Note: The mere presence of the attribute does not do anything. It must be checked by some part of the code. * * @param null|string $replacement Any replacement for the deprecated thing * @param null|string $since When it was deprecated * @param null|string $reason Why it was deprecated * @param null|string $mdl Link to the Moodle Tracker issue for more information * @param bool $final Whether this is a final deprecation * @param bool $emit Whether to emit a deprecation warning */ public function __construct( public readonly ?string $replacement, public readonly ?string $since = null, public readonly ?string $reason = null, public readonly ?string $mdl = null, public readonly bool $final = false, public readonly bool $emit = true, ) { if ($replacement === null && $reason === null && $mdl === null) { throw new \coding_exception( 'A deprecated item which is not deprecated must provide a reason, or an issue number.', ); } } }