在特定条件下设置并存储变量直到另一个特定条件

时间:2014-06-02 14:20:15

标签: php variables switching

你好,我是编程方面的新手。我需要在php中解决这个问题,但任何不同语言的解决方案都会很棒。我尝试使用if语句解决它,但如果条件被更改,则变量消失。更好理解的简单例子。

// possible conditions ( 'cond1', 'cond2', 'cond3', 'cond4','cond5' )
// conditions can be called randomly

我想有一些像这样的东西:

$variable = 'off';
since ( $condition == 'cond2' )
    $variable = 'on';
until ( $condition == 'cond4' )

目标是切换变量' on'在' cond2'当其他条件在他们的订单上独立变化时,条件并保持开启,直到条件变为“条件”为止。并且变量被切换回' off'。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

我不认为您当前的概念在PHP中是可实现的,因为您无法监听变量,您需要主动获得通知。因此,具有相同解决方案但具有不同概念的一种情况将是

class Condition {

    private $value;
    private $variable = false;

    public function setCondition($new_value) {
        $this->value = $new_value;
    }

    public function getCondition() {
        return $this->value;
    }

    public function isVariableSet() {
        return ($this->variable === true); //TRUE  if $this->variable is true
                                           //FALSE otherwise
    }

}

现在,在方法setCondition(...)中,您可以倾听并主动设置variable

    public function setCondition($new_value) {
        switch ($new_value) {
            case 'cond2':
                $this->variable = true;
                break;
            case 'cond4':
                $this->variable = false;
                break;
        }
        $this->value = $new_value;
    }

使用此功能,您可以像以下一样使用它

$foo = new Condition();
$foo->setCondition('cond1');
var_dump( $foo->isVariableSet() ); //FALSE

$foo->setCondition('cond2');
var_dump( $foo->isVariableSet() ); //TRUE

$foo->setCondition('cond3');
var_dump( $foo->isVariableSet() ); //TRUE

$foo->setCondition('cond4');
var_dump( $foo->isVariableSet() ); //FALSE

或者在你的情况下:

$conditions = array( 'cond1', 'cond2', 'cond3', 'cond4','cond5' );

$cond = new Condition();
foreach ($conditions as $i => $condition) {
    $cond->setCondition($condition);
    if ($cond->isVariableSet() == true) {
        $toggle = 'on';
    }
    else {
        $toggle = 'off';
    }
    $results[$condition] = $toggle.' ;  ';
}

如果你没有在循环之外创建Condition的实例,那么每次创建一个新对象并且没有状态停留时你什么也得不到。但是,确切地说这是必需的。

您也可以通过array_map()执行此操作并保存foreach()

$conditions = array( 'cond1', 'cond2', 'cond3', 'cond4','cond5' );

$cond = new Condition();
$results = array();

$setCondGetVariable = function($condition) use($cond) {
    $cond->setCondition($condition);
    if ($cond->isVariableSet() == true) {
        $toggle = 'on';
    }
    else {
        $toggle = 'off';
    }
    return $toggle.' ;  ';
};

$results = array_map($setCondGetVariable, $conditions);