PHP三元语句

发布于 2024-08-13 04:08:28 字数 567 浏览 6 评论 0原文

您好,我最近正在查看一个购物车分页器类,试图理解他们的代码,以便当我遇到以下代码行时我可以构建自己的分页器。它类似于三元语句,但以我以前从未见过的方式编写。我会用谷歌搜索,但我不知道该用谷歌搜索什么。有人可以告诉我它的工作原理是什么以及它的名称吗,以便我可以搜索它并了解更多信息。

    return ($output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '') 
. '<div class="' . $this->style_results . '">' . sprintf($this->text, ($total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($total - $limit)) ? $total : ((($page - 1) * $limit) + $limit), $total, $num_pages) . '</div>';

请告诉我这是否足以继续下去 谢谢 安德鲁

Hi i was recently looking over a shopping cart paginator class, trying to understand their code so i could build my own paginator when i came across the following line of code. It resembles a ternary statement but is written in a way that i have never seen before. I would google it but i wouldn't know what to google. Could someone please tell me what this is how it works and what it is called so i can do a search for it and learn more.

    return ($output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '') 
. '<div class="' . $this->style_results . '">' . sprintf($this->text, ($total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($total - $limit)) ? $total : ((($page - 1) * $limit) + $limit), $total, $num_pages) . '</div>';

Just let me know if this is enough code to go on
Thanks
Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧人九事 2024-08-20 04:08:28

很好...它只是一个常规条件运算符(好吧,其中 3 个,以及一些串联)。

如果你重新格式化它,它会变得更清晰一些:

$output = $output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '';

$min = $total ? (($page - 1) * $limit) + 1 : 0;
$max = (($page - 1) * $limit) > ($total - $limit) ? $total : ((($page - 1) * $limit) + $limit);

$output .= '<div class="' . $this->style_results . '">'
    . sprintf($this->text, $min, $max, $total, $num_pages)
    . '</div>';

return $output;

Nice... It is just a regular conditional operator (well, 3 of them, along with some concatenation).

If you reformat it, it gets a bit clearer:

$output = $output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '';

$min = $total ? (($page - 1) * $limit) + 1 : 0;
$max = (($page - 1) * $limit) > ($total - $limit) ? $total : ((($page - 1) * $limit) + $limit);

$output .= '<div class="' . $this->style_results . '">'
    . sprintf($this->text, $min, $max, $total, $num_pages)
    . '</div>';

return $output;
﹂绝世的画 2024-08-20 04:08:28

它被称为条件运算符,我认为这是对它的滥用。条件运算符可用于将简短的 if-else 结构减少为一条语句,而不影响代码的可读性。

if(a == b)
    c = d;
else
    c = e;
//can be written as:
c = a == b ? d : e;

给定的代码可以写为:

return ($output ? 
            '<div class="' . $this->style_links . '">' . $output . '</div>'
         : '') . 
    '<div class="' . $this->style_results . '">' . 
    sprintf($this->text, 
        ($total) ? 
            (($page - 1) * $limit) + 1 
          : 0, 
        ((($page - 1) * $limit) > ($total - $limit)) ? 
            $total 
          : ((($page - 1) * $limit) + $limit), 
        $total, $num_pages) . '</div>';

并且相当于:

if($output)
    $str = '<div class="' . $this->style_links . '">' . $output . '</div>';
else
    $str = '';

$str .= '<div class="' . $this->style_results . '">';

if($total)
    $first = (($page - 1) * $limit) + 1;
else
    $first = 0;

if((($page - 1) * $limit) > ($total - $limit))
    $second = $total;
else
    $second = ((($page - 1) * $limit) + $limit);

$str .= sprintf($this->text, $first, $second, $total, $num_pages);
$str .= '</div>';

It is called conditional operator and I would consider this to be an abuse of it. Conditional operators can be useful in reducing short if-else constructs into one statement without effecting the readability of the code.

if(a == b)
    c = d;
else
    c = e;
//can be written as:
c = a == b ? d : e;

The given code can be written as:

return ($output ? 
            '<div class="' . $this->style_links . '">' . $output . '</div>'
         : '') . 
    '<div class="' . $this->style_results . '">' . 
    sprintf($this->text, 
        ($total) ? 
            (($page - 1) * $limit) + 1 
          : 0, 
        ((($page - 1) * $limit) > ($total - $limit)) ? 
            $total 
          : ((($page - 1) * $limit) + $limit), 
        $total, $num_pages) . '</div>';

And is equivalent to:

if($output)
    $str = '<div class="' . $this->style_links . '">' . $output . '</div>';
else
    $str = '';

$str .= '<div class="' . $this->style_results . '">';

if($total)
    $first = (($page - 1) * $limit) + 1;
else
    $first = 0;

if((($page - 1) * $limit) > ($total - $limit))
    $second = $total;
else
    $second = ((($page - 1) * $limit) + $limit);

$str .= sprintf($this->text, $first, $second, $total, $num_pages);
$str .= '</div>';
留蓝 2024-08-20 04:08:28
expression ? runs if true : runs if false;

更多信息

 http://www.johnhok.com/2008/02/23/php-tip-tertiary-operator/

在您的情况下:

$output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : ''

如果 $output 变量不为空,则返回以下内容,否则返回空 '' 字符串。

<div class="' . $this->style_links . '">' . $output . '</div>'

代码中使用的其他三级运算符的情况也是如此。

expression ? runs if true : runs if false;

More here

 http://www.johnhok.com/2008/02/23/php-tip-tertiary-operator/

In your case:

$output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : ''

If $output variable is not empty then following is return otherwise empty '' string is returned.

<div class="' . $this->style_links . '">' . $output . '</div>'

Same is the case with other tertiary operators used in your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文