如何创建动态函数名?

我正在使用根据频率添加日期的碳。目前这是我的工作代码。


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);

我知道这行不通。有什么办法可以实现吗?


三国纷争
浏览 157回答 3
3回答

繁星coding

您不需要动态函数名称。这样的代码很难理解。就这样做:$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除了“年”,它还适用于日、周、月等(参见单位相关格式)你甚至不需要 Carbon,DateTime 做得很好。

暮色呼如

只需使用addUnit开箱即用的方法:Carbon::now()->addUnit($repetition_frequency, $repetition)它会无差别地采用Day, day, dayscases/pluralization 和 Carbon 的任何支持单位。

侃侃尔雅

可以做到,但你要么需要在变量中捕获它,要么使用 {} 来分隔代码ex: $repetition_frequency = 'Year';$function = 'add'.$repetition_frequency;$test_date->$function($repetition);还要注意开箱即用的日期添加功能,例如修改和添加月份,如果您要将 1 个月添加到 2020-01-31,您最终会得到 2020-03-03,这可能不是您想要的结果。addMonthNoOverflow如果期望的结果应该是 2020-02-29,Carbon 带有一个方便的函数。
打开App,查看更多内容
随时随地看视频慕课网APP