如何创建动态函数名?
How to create a dynamic function name?
我正在使用根据频率添加日期的碳。目前这是我的工作代码。
if ($repetition_frequency == 'Day') {
$test_date->addDays($repetition);
} else if ($repetition_frequency == 'Week') {
$test_date->addWeeks($repetition);
}else if ($repetition_frequency == 'Month') {
$test_date->addMonths($repetition);
}else if ($repetition_frequency == 'Year') {
$test_date->addYears($repetition);
}
我的目标是删除 if 条件并取决于我将通过 $repetition_frequency
调用的函数
目标:
ex: $repetition_frequency = 'Year';
$test_date->'add'.$repetition_frequency->($repetition);
// i want => $test_date->addYear->($repetition);
我知道这行不通。有什么办法可以实现吗?
您不需要动态函数名。这样的代码很难理解。就像这样:
$test_date = Carbon\Carbon::today(); //2020-06-10
$repetition = 3;
$repetition_frequency = 'Year';
$test_date->modify($repetition." ".$repetition_frequency);
echo (string)$test_date;
输出:
2023-06-10 00:00:00
而不是 "Year" 它也适用于日、周、月等 (see units relative Formats)
你甚至不需要 Carbon,DateTime 做得很好。
可以做到,但要么需要在变量中捕获它,要么使用 {} 分隔代码
ex: $repetition_frequency = 'Year';
$function = 'add'.$repetition_frequency;
$test_date->$function($repetition);
还要注意开箱即用的日期添加功能,例如 modify 和 addMonths,如果您要将 1 个月添加到 2020-01-31,您最终会得到 2020-03-03,这可能不是你想要的结果。如果期望的结果应该是 2020-02-29,Carbon 带有一个方便的 addMonthNoOverflow
函数。
只需使用开箱即用的 addUnit
方法:
Carbon::now()->addUnit($repetition_frequency, $repetition)
它将无差别地使用 Day
、day
、days
cases/pluralization 和任何支持的 Carbon 单位。
我正在使用根据频率添加日期的碳。目前这是我的工作代码。
if ($repetition_frequency == 'Day') {
$test_date->addDays($repetition);
} else if ($repetition_frequency == 'Week') {
$test_date->addWeeks($repetition);
}else if ($repetition_frequency == 'Month') {
$test_date->addMonths($repetition);
}else if ($repetition_frequency == 'Year') {
$test_date->addYears($repetition);
}
我的目标是删除 if 条件并取决于我将通过 $repetition_frequency
调用的函数目标:
ex: $repetition_frequency = 'Year';
$test_date->'add'.$repetition_frequency->($repetition);
// i want => $test_date->addYear->($repetition);
我知道这行不通。有什么办法可以实现吗?
您不需要动态函数名。这样的代码很难理解。就像这样:
$test_date = Carbon\Carbon::today(); //2020-06-10
$repetition = 3;
$repetition_frequency = 'Year';
$test_date->modify($repetition." ".$repetition_frequency);
echo (string)$test_date;
输出:
2023-06-10 00:00:00
而不是 "Year" 它也适用于日、周、月等 (see units relative Formats) 你甚至不需要 Carbon,DateTime 做得很好。
可以做到,但要么需要在变量中捕获它,要么使用 {} 分隔代码
ex: $repetition_frequency = 'Year';
$function = 'add'.$repetition_frequency;
$test_date->$function($repetition);
还要注意开箱即用的日期添加功能,例如 modify 和 addMonths,如果您要将 1 个月添加到 2020-01-31,您最终会得到 2020-03-03,这可能不是你想要的结果。如果期望的结果应该是 2020-02-29,Carbon 带有一个方便的 addMonthNoOverflow
函数。
只需使用开箱即用的 addUnit
方法:
Carbon::now()->addUnit($repetition_frequency, $repetition)
它将无差别地使用 Day
、day
、days
cases/pluralization 和任何支持的 Carbon 单位。