Posted by Hilarion on 08/22/05 16:07
> <?php
>
> function foo($bar)
> {
> return print($bar);
> }
>
> if ( print("a") | print("b") );
> echo "<br>";
> if ( print("a") || print("b") );
> echo "<br>";
> if ( print("a") or print("b") );
> echo "<br>";
>
> echo "<br>";
> if ( foo("a") | foo("b") );
> echo "<br>";
> if ( foo("a") || foo("b") );
> echo "<br>";
> if ( foo("a") or foo("b") );
>
> ?>
>
> What is the difference?
"print" is not a function (it is a language construct) and not
understanding this causes misinterpretation of parentheses
(round brackets) - they do NOT isolate parameters in case
of "print".
So:
print("a") | print("b")
is equal to:
print "a" | print("b")
which is equal to:
print( "a" | print("b") )
which causes printing of "b" and result of ("a" | 1) which is 1.
print("a") || print("b")
is equal to:
print( ("a") || print("b") )
Expression (("a") || anything) is always true and because of
that the above expression is evaluated to print(true), which
prints 1.
print("a") or print("b")
is equal to:
(print("a")) or (print("b"))
First "print" prints "a" and returns 1. In this case rest
of expression is not evaluated and that's why "b" is not printed.
"foo" is a function, so parentheses do isolate parameters.
Hilarion
PS.: You do not have to use "if" to evaluate expressions.
if ( print("a") | print("b") );
is equal to
print("a") | print("b");
[Back to original message]
|