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();
}
}
如果您只想让这些字段仅在模型内部可用,请将其声明为私有。
我的模型中有两个变量用于一些函数
$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();
}
}
如果您只想让这些字段仅在模型内部可用,请将其声明为私有。