Strange IF Statement behaviour
<p>I have an IF statement that consists of two separate function calls
passing values to two variables. Obviously if neither value is 'FALSE'
then the code block is executed:</p>

<pre><code>&lt;?php
   class MyValidater {
      static function validateString($string) {
         if (preg_match("/[A-Za-z]+/", $string)) {
            return $string;
         } else {
            return false;
         }
      }
   }

   $firstName = "Daniel";
   $surname = "Simmons";

   // Dodgy IF statement
   if ($first = MyValidater::validateString($firstName) &amp;&amp; $second = MyValidater::validateString($surname)) {
      print("Success: $first $second");
   } else {
      print("Fail: $first $second");
   }
?&gt;
</code></pre>

<p>As you can see both the $first and $second variables should contain
the values held in $firstName and $surname after successfully being
validated by the Static method validateString.</p>

<p>However, the values of the two variables end up: $first = '1' and
$second = "Simmons".</p>

<p>The '1' should be "Daniel" but for some reason $first is being passed
the value '1' or TRUE. If you swap the two assignment statements over
so that $second is evaluated first, you end up with the opposite
outcome as before. $second = '1' and $first = "Daniel"</p>

<p>Can anyone explain why the String value "Daniel" being returned from
the class method is being changed into the int '1' for the first part
of the conditional statement only? I have had a quick look though the
PHP documentation but cannot find an explanation.</p>

<p>For the moment the workaround is to change the return value from the
static method to be true/false and then make $first = $firstName,
etc... upon success. But this involves more code and I would rather
find out why this way does not work.</p>
