PHP: Как динамически изменить порядок условий if - PullRequest
1 голос
/ 14 мая 2011

Ситуация такая: есть непрерывный цикл, который обновляет некоторые значения. Затем скрипт проверяет определенные условия. (Упрощенный) код:

<?php
set_time_limit(0);
// etc
while(1==1)
{
    $a = getFromDatabase('a'); // function to get value of A
    $b = getFromDatabase('b'); // function to get value of B
    $c = getFromDatabase('c'); // function to get value of C
    $d = getFromDatabase('d'); // function to get value of D

    if($a >= 12 && time() <= $b && ($d === false || $d <= time()))
    {
         include 'pages/'.$a.'.php';
    }
    if($b <= 3 && time() >= $d && ($c === false || $c <= time()))
    {
         include 'pages/'.$b.'.php';
    }
}

Мой вопрос: как я могу динамически изменить порядок этих операторов IF?

Как

$order = array('b','a'); // first b then a

Важно: условия действительно динамические. Таким образом, нет реальной схемы (приведенный выше пример упрощен, а не полные условия)

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Поместите их в функции, затем просто сохраните название функций и выполните каждую из них по очереди.

function func1($a, $b, $c, $d)
{
  if (...)
  {
    return $a
  }
  return false;
}

function func2($a, $b, $c, $d)
 ...

$funcs = Array('func1', 'func2');

 ...

foreach($funcs as $func)
{
  if ($page = $func($a, $b, $c, $d))
  {
    include "pages/$page.php"
  }
}
1 голос
/ 14 мая 2011

Не уверен, что это то, что вы хотите, но вы можете поставить if в функции:

<?php
set_time_limit(0);
function a($a,$b,$c,$d){
        if($a >= 12 && time() <= $b && ($d === false || $d <= time()))
        {
             include 'pages/'.$a.'.php';
        }
}
function b($a,$b,$c,$d){
        if($b <= 3 && time() >= $d && ($c === false || $c <= time()))
        {
             include 'pages/'.$b.'.php';
        }
}

// etc
while(1==1)
{
    $a = getFromDatabase('a'); // function to get value of A
    $b = getFromDatabase('b'); // function to get value of B
    $c = getFromDatabase('c'); // function to get value of C
    $d = getFromDatabase('d'); // function to get value of D
    $order = array('b','a'); // first b then a
    foreach( $order as $fun)
        call_user_func_array($fun, array($a,$b,$c,$d))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...