首页 > 解决方案 > 如果变量具有特定值,则中断

问题描述

我尝试侦听变量的值并在它具有特定值时执行一些代码。

例如,我在 switch 语句中执行函数,如果值为false element(),我必须执行。break$element

目前我这样做:

switch(strtolower($testcase)) {
    case 'test':
        $element = $sel->element("class name", "btn-primary", true);
        if ($element == false) { break; }
        $element->click("");
...

public function element($using, $value, $takeScreenshot=false, $customMessage="")
{   
    try {
        $element = $this->driver->element($using, $value);

    } catch(PHPWebDriver_UnhandledWebDriverError $exception) {

        $msg = "<b>PHPWebDriver_UnhandledWebDriverError: $using</b> is "
                . "not a valid value for the parameter <b>\$using</b>!";

        if ($customMessage !== "") {
            $msg = "<b>$customMessage</b><br>$msg";
        }

        $this->setMessage(1, $msg, $exception, $takeScreenshot, $value);
        return false;

    } catch(PHPWebDriver_NoSuchElementWebDriverError $exception) {
        $msg = "<b>PHPWebDriver_NoSuchElementWebDriverError:</b> No "
                . "Element with <b>'$using'</b> and value <b>'$value'</b> found !";

        if ($customMessage !== "") {
            $msg = "<b>$customMessage</b><br>$msg";
        }

        $this->setMessage(1, $msg, $exception, $takeScreenshot, $value);
        return false;
    }

    return $element;
}

但我想简化它,以便if ($element == false) { break; }不再需要这条线。例如

switch(strtolower($testcase)) {
    case 'test':
        $element = $this->element("class name", "btn-primary", true);
        $element->click("");
...

我试过了,return break;但这失败了。还有其他方法吗?例如,如果值为false ,我可以添加一个break在switch case 中自动执行的EventListener吗?$element

标签: php

解决方案


在构建函数时,通常最好将它们设计为解耦,而不是耦合。这意味着, element() 不应该关心调用它的内容。

因此,试图从 element() 中中断开关将是一个糟糕的编程设计。

如果 element() 在到达某个位置时应该总是停止执行,无论调用它的是什么,你都应该考虑抛出一个异常。但是,这不会简化您的 switch 语句中的代码,因为您必须使用 try、catch 块。

话虽如此,由于 PHP 允许在条件中赋值,您可以将您编写的代码简化为:

    if ($element = $sel->element("class name", "btn-primary", true)) {
         $element->click("");
    }

推荐阅读