Как выполнить функцию переменной, которая имеет ввод по умолчанию - PullRequest
0 голосов
/ 22 января 2019

У меня есть планировщик что-то вроде

$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 голосов
/ 31 января 2019

Если я правильно вас понял, ваш вопрос состоит из двух частей:

  1. Как использовать значения аргументов по умолчанию с PHP функциями переменных

  2. Как создать гибкую схему для Laravel настройки планировщика и

По поводу вашего первого вопроса - вот пример значений аргументов по умолчанию для переменных функций:

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

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

Относительно вашего второго вопроса - я считаю, что вообще не стоит хранить фрагменты кода и генерировать из него ваш скрипт.Сначала это выглядит как хитрый трюк, но этот функционал быстро становится сложным и хрупким, когда ваша программа становится больше.Он уязвим, так как может предоставить возможность запуска вредоносного кода, внедренного в вашу базу данных.Также трудно выполнить рефакторинг, когда вы собираетесь переписать его, например, для другого PHP фреймворка (или даже перенести его на другой язык программирования), потому что это зависит от конкретной реализации планировщика.Если вам нужен такой гибкий планировщик IMHO, лучше реализовать собственный настраиваемый уровень абстракции над планировщиком Laravel с нужным вам функционалом.

PS Кстати, в вашем примере кода есть ошибки - избыточные скобки в определениях функций.

...