2 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果 的返回值為socket_read()“thruthy”或“falsy”,則此方法有效。
假值是'', 0, [],null或false。
真實(shí)就是別的什么。
if ( $data = socket_read($socket, 1024) ) {
? ? ?echo $data;
}
如果您想更具體,您甚至可以執(zhí)行以下操作(感謝@Benni):
if ( 'foo' === $data = socket_read($socket, 1024) ) {
? ? echo 'data equals foo';
}
或者
if ( is_array($data = socket_read($socket, 1024) ) {
? ? var_dump($data);
}
如果您不確定socket_read()返回一個(gè) ,您的示例可能會(huì)引發(fā)異常string。
在這種情況下,您可以執(zhí)行以下操作:
if ( is_string($data = socket_read($socket, 1024)) ) {
? ? ?echo $data;
}

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
我想我應(yīng)該嘗試為此添加更多背景信息,也許其他人將來會(huì)發(fā)現(xiàn)它有用。
PHP 沒有(或者更重要的是,需要)海象運(yùn)算符的原因是,在 PHP 中,賦值運(yùn)算符=既是語句又是表達(dá)式。
當(dāng)你寫的時(shí)候
$var = 'foo';
您不僅將值foo分配給$var,而且整個(gè)語句都對(duì)其求值:
php > var_dump($var = 'foo');
string(3) "foo"
在 PHP 條件中使用=并不是在該上下文中對(duì)運(yùn)算符進(jìn)行某種神奇的覆蓋,它只是賦值也是表達(dá)式這一事實(shí)的自然副作用。
在Python 中,情況并非如此。賦值運(yùn)算符(同樣,=)只是一個(gè)語句。它本身沒有結(jié)果,因此不能在條件中使用。海象運(yùn)算符是在 v3.8 中添加的(如問題中提到的),作為彌補(bǔ)這一差距的一種方式。在問題“我們可以在條件下進(jìn)行分配嗎?”中有更多關(guān)于此問題的討論。和“:=”語法和賦值表達(dá)式:什么以及為什么?。
- 2 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)