如何执行具有默认输入的变量函数

时间:2019-01-22 18:40:27

标签: laravel-5 php-7.2

我有一个类似的调度程序

$schedule->command('foo')
          ->weekdays()
          ->hourly()
          ->timezone('America/Chicago')
          ->between('8:00', '17:00');

我想在('8:00','17:00'); 之间存储->,以便随时进行更改。稍后,例如,我可以使用-> at('02:00')(仅作为示例)。

我知道,有了PHP7,我们可以比使用

更好地使用变量函数。

http://php.net/manual/en/functions.variable-functions.php

<?php

function sound_dog()() { return 'woof'; }
function sound_cow()() { return 'moo'; }

$animal = 'cow';
print ('sound_' . $animal)();

但是,当我想在(“所有内容”)中使用默认输入时,它将无法正常工作。所有示例均假定没有默认输入。

我如何制作一个内部具有输入的变量函数?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您,那么您的问题包括两部分:

  1. 如何通过PHP变量函数使用默认参数值

  2. 如何为Laravel调度程序设置制定灵活的方案 和

关于您的第一个问题-这是变量函数的默认参数值的示例:

function sound_cow(string $sound = 'moo') { return $sound; }

$animal = 'cow';
print ('sound_' . $animal)();
print ('sound_' . $animal)('moowoof');

关于第二个问题-我认为存储代码块并从中生成脚本根本不是个好主意。乍一看,这似乎是个聪明的把戏,但是随着程序的扩大,此功能很快变得复杂而脆弱。它很容易受到攻击,因为它可能提供启动注入到数据库中的恶意代码的机会。例如,要为另一个PHP框架重写(甚至将其移植到另一种编程语言)时,也很难进行重构,因为这取决于特定的调度程序实现。 如果您需要如此灵活的调度程序恕我直言,最好在Laravel调度程序之上使用所需功能实现自己的可配置抽象层。

P.S。顺便说一句,您的代码示例有一个错误-函数定义中的多余括号。