为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建动态函数名?

如何创建动态函数名?

PHP
三国纷争 2023-05-12 15:45:18
我正在使用根据频率添加日期的碳。目前这是我的工作代码。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);我知道这行不通。有什么办法可以实现吗?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您不需要动态函数名称。这样的代码很难理解。就这样做:


$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 做得很好。



查看完整回答
反对 回复 2023-05-12
?
暮色呼如

TA贡献1853条经验 获得超9个赞

只需使用addUnit开箱即用的方法:

Carbon::now()->addUnit($repetition_frequency, $repetition)

它会无差别地采用Daydaydayscases/pluralization 和 Carbon 的任何支持单位。


查看完整回答
反对 回复 2023-05-12
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

可以做到,但你要么需要在变量中捕获它,要么使用 {} 来分隔代码


ex: $repetition_frequency = 'Year';


$function = 'add'.$repetition_frequency;


$test_date->$function($repetition);

还要注意开箱即用的日期添加功能,例如修改和添加月份,如果您要将 1 个月添加到 2020-01-31,您最终会得到 2020-03-03,这可能不是您想要的结果。addMonthNoOverflow如果期望的结果应该是 2020-02-29,Carbon 带有一个方便的函数。


查看完整回答
反对 回复 2023-05-12
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信