2

ここで、PHPソケットサーバーとクライアントの基本をかじっていました。

次に、これらの行に出くわしました(上記のリンクの最初の例からの抜粋、内部で発生しますwhile):

if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
    echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
    break 2;
}

if (!$buf = trim($buf)) {
    continue;
}

読み取り部分は問題ありませんが、読み取りエラーが発生した場合に備えて接続を閉じます。

しかし、その次ifは私を夢中にさせています。
まず、ブール値に値を割り当てる方法とその必要性について混乱しています。
第二に、表現全体を完全に理解するのに苦労しています。

そのifの中で何が起こるか、そしてそれがサーバーコンテキストにどのように適用されるかを誰かが説明してもらえますか?

PS 質問が適切に行われていない場合は、ご容赦ください。私はそこで何が起こっているのかについてあまりにも混乱していて、具体的に何を求めるべきかわかりません.

4

4 に答える 4

5

このステートメントでは、ブール値への代入はありません。falseの型と値を比較していますfalse(単に 0 ではなく、true false)。あなたはそれについてここで読むことができます

if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ)))

それで

if (!$buf = trim($buf)) {
    continue;
}

これは

$buf = trim($buf);
if ($buf == false) {
  continue;
}

だから、オリジナルを説明するには:

// The assignment happens first and then we're checking the boolean value
if (!$buf = trim($buf))
于 2013-04-05T11:18:58.470 に答える
1

コードの解説は以上です。

false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))

最初にsocket_readが呼び出され、結果が に格納され$bufます。次に$buf、 と比較して、それが であり、その値がfalseであるかどうかを確認します。(同時に同じ型と等しいことを意味します)boolfalse===

if (!$buf = trim($buf)) {
    continue;
}

コードのこの部分では、 first$bufがトリミングされ、結果が に格納され$bufます。次に、 かどうかをチェックし$bufますfalse。false の場合は、continueアクションを実行します。

于 2013-04-05T11:24:49.537 に答える
0

式は分割可能です。

  • $buf = trim($foo)
  • $check = !$buf
  • if ($check) { something(); }

最初に変数を取得し、それが false と評価されるかどうかを確認し (かも知れないfalse、かもnull知れない0)、最後にその情報に基づいて切り替えを行います。

于 2013-04-05T11:21:53.627 に答える
0

あなたが基本を求めているなら、旅をしてください!

このコードを試してください

<?php
    $buf="0 ";// (note the spaces)
    //next try changing $buf="1 "; (note the spaces for trim)

    echo $buf ."<----Non trimmed buf<br>" ;
    $buf= trim($buf);
    echo $buf ."<----trimmed buf<br>" ;
    echo !$buf ."<----!buf<br>" ;

    if (!$buf = trim($buf))
       echo "Trimmed buf is false";
    else
       echo "Trimmed buf is True";
?>

出力

0 <----Non trimmed buf
0<----trimmed buf
1<----!buf
Trimmed buf is false
于 2013-04-05T11:34:04.457 に答える