sean            Fri Sep  1 15:33:53 2006 UTC

  Modified files:              
    /phpdoc/en/language operators.xml 
  Log:
  note about non-obvious ternary evaluation (and recommend to avoid stacking); 
bug #38679
  
http://cvs.php.net/viewvc.cgi/phpdoc/en/language/operators.xml?r1=1.102&r2=1.103&diff_format=u
Index: phpdoc/en/language/operators.xml
diff -u phpdoc/en/language/operators.xml:1.102 
phpdoc/en/language/operators.xml:1.103
--- phpdoc/en/language/operators.xml:1.102      Tue May  9 18:18:34 2006
+++ phpdoc/en/language/operators.xml    Fri Sep  1 15:33:53 2006
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.102 $ -->
+<!-- $Revision: 1.103 $ -->
  <chapter id="language.operators">
   <title>Operators</title>
   <simpara>
@@ -686,6 +686,34 @@
       issued in later PHP versions.
      </simpara>
     </note>
+    <note>
+     <para>
+      Is is recomended that you avoid "stacking" ternary expressions. PHP's
+      behaviour when using more than one ternary operator within a single
+      statement is non-obvious:
+      <example>
+       <title>Non-obvious Ternary Behaviour</title>
+       <programlisting role="php">
+<![CDATA[
+<?php
+// on first glance, the following appears to output 'true'
+echo (true?'true':false?'t':'f');
+
+// however, the actual output of the above is 't'
+// this is because ternary expressions are evaluated from left to right
+
+// the following is a more obvious version of the same code as above
+echo ((true ? 'true' : 'false') ? 't' : 'f');
+
+// here, you can see that the first expression is evaluated to 'true', which
+// in turn evaluates to (bool)true, thus returning the true branch of the
+// second ternary expression.
+?>
+]]>
+       </programlisting>
+      </example>
+     </para>
+    </note>
    </sect2>
 
   </sect1>

Reply via email to