簡體   English   中英

使函數返回 0 並將其存儲在變量中

[英]Make the function return 0 and store it in a variable

似乎非常簡單,但在 SO 上找不到解決此特定案例的方法

一個函數可能返回 0 或另一個數字的值,然后我想將其存儲在變量$s以計算內容。 但是找不到干凈的方法。

例如:

function f() {
    $v = "0";
    return $v;
}

if($s = f() !== false) {
    echo $s;
    // ^ I want 0, but the value above is 1 (since it's true)
}

我嘗試將它作為字符串返回

返回“0”而不是數字,但它不起作用。

如果我這樣做,它不會評估為真,所以什么都不會發生

if($s = f()) {
   // returns nothing
}

但是當我var_dump(f()) ,它確實顯示字符串 '0' (length=1)

所以我可以做

if(var_dump(f()) == 0)

或者

if(f() == 0)

但是沒有更簡潔的方法來做到這一點,因此該函數可能返回 0 或其他數字,而我可以將其捕獲在變量中?

添加括號:

if (($s = f()) !== false) {

否則,您將計算值f() !== false並將其分配給$s ,而不是將f()分配給$s然后與false進行比較。

第一的

if($s = f() !== false) {
echo $s;
// ^ I want 0, but the value above is 1 (since it's true)
}

這里發生的是 f() 的返回值嚴格與 false 進行比較,即“0”與 false 進行比較。 它們不嚴格相等,因此 f() !== false 返回 true,它在 $s 中存儲為 1。

下一個,

if($s = f()) {
// returns nothing
}

這不會進入 if 塊,因為 $s 包含“0”並且它大致等於 false。

下一個

if(var_dump(f()) == 0) or if(f() == 0)

這是有效的,因為它松散地將“0”與 0 進行比較,這是真的。 因此它進入塊。

請記住,如果條件進行松散比較或 == 和 === 進行嚴格比較。 更多關於它在這里

所以,這應該適用於你的情況

if(($s = f()) !== 0)

如果 f() 返回整數

嘗試一些括號:

if(($s = f()) !== false) {

強制$s等於f() ,而不是f() !== false

暫無
暫無

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

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