簡體   English   中英

PHP 如果簡寫

[英]PHP if shorthand

我有一個字符串,我想在它后面附加一些其他字符串。 讓我們說:

$my_string = 'Hello';

$my_string .= ' there';

這將返回“你好”。

我想讓這個條件是這樣的:

$my_string = 'Hello';

$append = 'do';

if ( $append == 'do' ) {

    $my_string .= ' there';

}

現在,我想使用三元運算來執行此操作,但我遇到的所有示例都是針對 if/else 的,類似於:

$my_string .= ( $append == 'do' ) ? ' there' : '';

那么是否有可能只用 IF 而不用別的呢?

不。 然而,相反的情況也是可能的。 這是 PHP 文檔中的引用:

自 PHP 5.3 起,可以省略三元運算符的中間部分。 表達式 expr1 ?: 如果 expr1 的計算結果為 TRUE,則 expr3 返回 expr1,否則返回 expr3。

http://php.net/manual/en/language.operators.comparison.php

不......三元意味着你需要條件的三部分,真實的部分和錯誤的部分

結合 mellamokb 和 Andz 你可以這樣做:

( $append != 'do' ) ?: $my_string .= ' there';

檢查條件然后附加到字符串的另一種方法是:

 ($append == 'do')  and  ($my_string .= ' there');

但這實際上只是一個if位移。 但接近於“沒有其他的三元”。

如果您正在考慮縮短代碼,您可以在一行中編寫相同的內容。

if ($append == 'do') {$my_string .= ' there';}

編輯

我剛剛發現了這一點,並認為派上用場。 您也可以像這樣編寫 if 塊

if ($append == 'do') $my_string .= ' there';

您不能在沒有 else/false 部分的情況下使用三元,但是如果您的目的是將所有內容都放在一行上,我建議您嘗試以下替代方法:

($append == 'do' && $my_string .= ' there');

如果第一個是真的,它將繼續第二個陳述。 否則將在第一次評估結果為 false 后停止。

參考惰性求值(所謂的短路求值

或者您可以做相反的事情,將true if部分留空,並聲明 false,正如 Andz 正確指向的那樣。

你可以這樣做:

( $append == 'do' ) ? $my_string .= ' there' : $noop ;

如果您反轉語句以使三元在賦值語句的外部而不是內部,那么您可以將整個語句放在 TRUE 部分,然后在 ELSE 部分執行一些非操作命令。

如果您沒有什么可返回,一個簡單而非常有效的方法可能是使用TRUE FALSE值。 你不僅有一個參數,而且你可以返回你想要的確切值,比如

$my_string .= ( $append == 'do' ) ? ' there' : true;

您可以創建一個可以執行所需操作的函數。 而不是每次都寫出if語句。

function doAppend($doIt, &$value, $appendValue)
{
    if($doIt) $value .= $appendValue;
}

調用它:

doAppend($append == 'do', $my_string, ' there');

注意第二個參數是如何引用的,所以它也會在調用代碼中改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM