【问题标题】:Ternary operator only running first part of condition三元运算符仅运行条件的第一部分
【发布时间】:2020-01-07 12:12:05
【问题描述】:

我无法让计数条件正常工作。目前,无论我上传一个还是多个文件,“多个文件”的第一个条件都在运行。第二部分永远不会运行。

如果只上传了一个文件,我还需要做些什么来运行条件的第二部分吗?

$fu = new fileUpload();
$filename = $fu->upload();
$out = (count($filename) ? 'Multiple files were' : 'A file was'). '  uploaded. You can download ' . (count($filename) ? 'them' : 'the file'). ' from:</ul>';

【问题讨论】:

  • 你为什么要使用这样的三元组?三元语句旨在减少仍然可以通过三元读取的代码行。这是 100% 不可读的 - 对 if 语句使用完整的语法。
  • 手册说:注意:建议你避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时 PHP 的行为并不明显
  • @Andreas 那么,我应该把它变成一个普通的 if 语句吗?
  • 这完全取决于您。如果您可以忍受显示的错误消息,请保持原样。但是,如果您想要可读且可靠的代码,请更改它。

标签: php conditional-statements ternary-operator


【解决方案1】:

你的逻辑有问题。

count($filename) 如果是 0 以外的任何值,则解析为真值。

因此,无论是 1 个文件还是 64 个文件,第一部分都将始终解析为 true。你需要:

count($filename) > 1 ?

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2012-02-22
    • 2013-04-26
    • 2013-06-06
    • 2023-04-11
    • 2017-07-16
    相关资源
    最近更新 更多