2 回答

TA貢獻1835條經驗 獲得超7個贊
如果 的返回值為socket_read()“thruthy”或“falsy”,則此方法有效。
假值是'', 0, [],null或false。
真實就是別的什么。
if ( $data = socket_read($socket, 1024) ) {
? ? ?echo $data;
}
如果您想更具體,您甚至可以執行以下操作(感謝@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()返回一個 ,您的示例可能會引發異常string。
在這種情況下,您可以執行以下操作:
if ( is_string($data = socket_read($socket, 1024)) ) {
? ? ?echo $data;
}

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