Вам нужно, чтобы ваши функции возвращали что-то , чтобы вы знали, соответствуют ли они чему-либо:
function myFunction() {
return 'A';
}
$a = myFunction();
echo $a; # value;
Ваша функция возвращает более одного значения.Таким образом, вы можете заставить его возвращать несколько значений, что можно сделать с помощью массива:
function myFunction2() {
return array('A', 'B');
}
list($a, $b) = myFunction2();
echo $a, ' ', $b; # A B;
Помимо этих основ, у вас есть много дублирования кода в этих двух функциях.Они в основном отличаются по шаблону, с которым вы работаете preg_match
.Таким образом, вы можете извлечь эту часть как собственный метод (Refactoring -> Extract Method).
Выполнение этого и фактическая проверка возвращаемых значений из ваших собственных функций и функций PHP могут привести к этому.Что не идеально, но показывает некоторое улучшение по сравнению с исходным кодом и позволяет вам фактически проверить, был ли запущен какой-либо тип события.Пример:
$eventtype = 'DTSTART;VALUE=DATE:123456789 DTEND;VALUE=DATE:123456789 RRULE:FREQ=2;INTERVAL=2222;UNTIL=123456789';
$result = recurrence_info_day($eventtype);
if ($result) {
$recurrence_type = "daily";
list($event, $form) = $result;
} else {
$result = recurrence_info_weekly($eventtype);
if ($result) {
$recurrence_type = "weekly";
list($event, $form) = $result;
}
}
var_dump($eventtype, $recurrence_type, $event, $form);
function recurrence_info_day($eventtype){
$pattern = '/^DTSTART;VALUE=DATE:(\d+)\s+DTEND;VALUE=DATE:(\d+)\s+RRULE:FREQ=(\w+);INTERVAL=(\d+);UNTIL=(\d+)/';
return reccurence_info_pattern($eventtype, $pattern);
}
function recurrence_info_weekly($eventtype){
$pattern = '/^DTSTART;VALUE=DATE:(\d+)\s+DTEND;VALUE=DATE:(\d+)\sRRULE:FREQ=(\w+);BYDAY=(\d+);UNTIL=(\d+)/';
return reccurence_info_pattern($eventtype, $pattern);
}
function reccurence_info_pattern($eventtype, $pattern)
{
$r = preg_match(
$pattern,
$eventtype,
$recinfow
);
if (!$r) {
return NULL;
}
$event = new stdClass();
$event->start = $recinfow[1];
$event->end = $recinfow[2];
$event->frequency = $recinfow[3];
$event->days = $recinfow[4];
$event->until = $recinfow[5];
$form = new stdClass();
$form->startdate = substr($event->start, 4, 2) . "/" . substr($event->start, 6) . "/" . substr($event->start, 0, 4);
$form->enddate = substr($event->until, 4, 2) . "/" . substr($event->until, 6) . "/" . substr($event->until, 0, 4);
return array($event, $form);
}
Вывод:
string(98) "DTSTART;VALUE=DATE:123456789 DTEND;VALUE=DATE:123456789 RRULE:FREQ=2;INTERVAL=2222;UNTIL=123456789"
string(5) "daily"
object(stdClass)#1 (5) {
["start"]=>
string(9) "123456789"
["end"]=>
string(9) "123456789"
["frequency"]=>
string(1) "2"
["days"]=>
string(4) "2222"
["until"]=>
string(9) "123456789"
}
object(stdClass)#2 (2) {
["startdate"]=>
string(11) "56/789/1234"
["enddate"]=>
string(11) "56/789/1234"
}
Надеюсь, это полезно.