0

私は同僚のコードを編集しようとしています(彼は休暇中で、手の届かないところにいます)。次のifステートメントがあります。

if($this->carrier() == 1 and $this->carrier() == 2) {
    return 'V';
}

私の望みは、彼が誤って「または」の代わりに「and」を付けて、私が受けているバグを説明できることですが、彼は私よりもPHPについてよく知っているので、直感に反するのではなく、これが間違っていることを確認したいと思います。 。

4

4 に答える 4

11

はい、それは潜在的な副作用を伴う機能なので、それは本当かもしれません。

例えば:

function carrier() {
    return $someValue++;
}
于 2012-06-18T16:55:53.700 に答える
5

はい。このcarrier()メソッドは、呼び出すたびに返される値をインクリメントできます。

于 2012-06-18T16:55:50.847 に答える
2

はい、可能性はわずかです。

彼は関数を2回呼び出していますが、その関数のテキストは含まれていません。つまり、このプロセスによって呼び出された回数を数えるなど、私たちには見えないことをしている可能性があります。

一方で、それは確かにタイプミスである可能性がはるかに高いです。

于 2012-06-18T16:57:03.717 に答える
1

可能です。これが実行可能な実例です。

class program
{
private $i = 1;
function carrier()
{
 $this->i=$this->i+1;
 return $this->i-1;
}

function run()
{
 if ($this->carrier()==1 && $this->carrier()==2)
 {
  echo "works";
 }
 else
 {
  echo "doesnt work" . $i;
 }
}
}

$prog = new Program();
$prog->run();
于 2012-06-18T17:05:44.777 に答える