【问题标题】:Setting variable value on PHP ternary case在 PHP 三元情况下设置变量值
【发布时间】:2017-08-15 12:10:14
【问题描述】:

我试图在后一种情况下使用三元输出来做两件事。

在增加错误计数后,我遇到的问题是在后一种情况下为变量设置文本值。

我尝试了一些方法,这里有两次尝试,但都无法设置 $errors_log 值。

问。如何在三元输出中设置变量值。

$errors_v=0;
if (validate_username() == false ? null : $errors_v++ && $errors_log='username invalid');

if ($errors_v != 0) {
    echo $errors_log;
}

function validate_username() {
    return true;
}

$errors_v=0;
$errors_log[];
if (validate_username() == false ? null : $errors_v++ && $errors_log[]='username invalid');

if ($errors_v != 0) {
    var_dump($errors_log);
}

function validate_username() {
    return true;
}

【问题讨论】:

  • 你的代码必须是可读和可理解的目前不是。
  • 想详细说明一下? @u_mulder
  • @u_mulder 是对的。这是可读的:if (!validate_username()) { ... }。您的代码更难阅读,这需要额外的时间来查看它。坚持这两条规则,你的队友就会尊重你:DRY KISS = 不要重复自己,保持简单和愚蠢。
  • @AndrejsCainikovs 哈哈!我感到闷闷不乐。谢谢。使它变得比需要的更困难。我选择了if (validate_username()){ $v++; $errors_log='username invalid';} 并按预期工作。问候 >.

标签: php ternary


【解决方案1】:

我会像下面那样做我的三进制,然后检查 $errors_log 是否不为空,如果不是,则打印出错误。

$errors_log[] = validate_username() === false ? null : 'username invalid';

if (!empty($errors_log)) {
    foreach($errors_log as $error) {
        echo $error;
    }
}

function validate_username() {
    return true;
}

如果还需要一个计数器,即使我真的建议您使用 $errors_log 数组,您也可以这样做:

if (!validate_username()) {
    $errors_log[] = 'username invalid';
    $errors_v++;
}

【讨论】:

  • @mickmackusa 嗯,可能是,但它似乎工作正常。也许我编写了太多的 JS,这是可能的。泰! :)
  • 我的意思是,因为您在速记条件中存储了一个空元素,所以 foreach() 将回显该空值,而对页面没有明显影响。
  • @mickmackusa 是的,但 OP 根据他的代码要求使用三元组。
【解决方案2】:

您正在混合“速记”和“速记”条件语法。

您模棱两可的函数名称及其返回值令人困惑/不直观。我建议重命名您的函数或反转它返回的布尔值。

始终努力使用DRY and DAMP 编码实践。

代码后半部分的方法看起来比前半部分更好。
如果要生成错误数组,不要费心增加计数器,只要在需要时对数组进行计数即可。

我认为没有必要用速记条件来修饰您的代码。

代码:(Demo)

function bad_username(){  // new meaningful function name
    return true;
}

$errors_log=[];  // declare the variable as an array
if(bad_username()){
    $errors_log[]='username invalid';  // push the value
}

if(sizeof($errors_log)){  // count elements in array, if 1 or more display them
    var_export($errors_log);
}else{
    echo "No Error";
}

输出:

array (
  0 => 'username invalid',
)

【讨论】:

    【解决方案3】:

    您不能在三元情况下执行两个操作。您可以检查$errors_log 是否为empty 以及它是否在if 语句中增加$errors_v,如下所示:

    if (validate_username() == false ? null : $errors_log='username invalid');
    
    if (!empty($errors_log)) {
       $errors_v++;
       echo $errors_log;
    }
    
    function validate_username() {
        return true;
    }
    

    【讨论】:

    • 它的 '$errors_log='username invalid')' 似乎不起作用
    • 将我的代码复制并粘贴到writephponline.com,输出为username invalid。你有任何错误吗?
    • @Derple 您不能在三元中设置多个值。然后你应该做一个正常的if... 声明。但是您不应该真正计算 - 您应该只在 $errors_log 数组上“计算”。
    • @Derple 你需要一个!,如果你想让它在检查失败时出错:) if(!validate_username()) ...
    • 是的,只要选择您喜欢的。从来没有一个正确的答案。
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2017-02-13
    • 2020-04-02
    • 2014-12-15
    • 2018-03-15
    相关资源
    最近更新 更多