Laravel - 使模型中的全局变量仅在模型内部使用

Laravel - Make global variable in Model to use only inside the Model

我的模型中有两个变量用于一些函数

$firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
$lastDayThisYear = Carbon::create(date('Y'), 12, 31, 0);

我如何提取它们并将它们设为全局以便仅在我的模型内部使用它们?

我知道它必须受到保护...但我不确定是否需要这样说:

protected static $firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
protected static $lastDayThisYear = Carbon::create(date('Y'), 12, 31, 0);

如果您要在一个模型中使用这些变量,只需这样做:

protected $firstDayThisYear;

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);

    $this->firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
}

然后与$this->firstDayThisYear一起使用。

此外,您可以通过以下方式获取年初和年度最后一天的开始:

Carbon::now()->startOfYear();
Carbon::now()->endOfYear()->startOfDay();

我想它更具可读性。

您尝试执行此操作的方式将行不通,因为 PHP 不允许您使用 "expression" 作为 属性 的默认值。

如果你坚持要它们 static 那么你应该创建一个静态方法来实现它。你可以这样做:

class YourModel extends Model
{
    protected static $firstDayOfThisYear;

    protected static function firstDayOfThisYear()
    {
        if (!static::$firstDayOfThisYear) {
            static::$firstDayOfThisYear = Carbon::create(date('Y'), 1, 1, 0);
        }

        return static::$firstDayOfThisYear;
    }

    public function useIt()
    {
        $firstDay = static::firstDayOfThisYear();
    }
}

如果您只想让这些字段仅在模型内部可用,请将其声明为私有。