RE: [PHP] PHP logic - Whats going on here?
| From: | Ed Lazor | Date: | Wed, 11 Aug 2004 17:26:07 +0000 |
| Subject: | RE: [PHP] PHP logic - Whats going on here? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-193477@lists.php.net to get a copy of this message | ||
Wow, Michael. Nice response.
-Ed
> -----Original Message-----
> From: Michael Sims [mailto:michaels@crye-leike.com]
> Sent: Wednesday, August 11, 2004 9:03 AM
> To: php-general@lists.php.net
> Subject: RE: [PHP] PHP logic - Whats going on here?
>
> Kim Steinhaug wrote:
> [snip]
> > For some reason the above results in a blank mail, no $body at all,
> > rest is fine. However, if I include a dummy for if all goes well :
> >
> > if(!$mail->Send()) {
> > echo $lang_error['mailer_error'] . "<br>\n";
> > } else {
> > // Why do I need this one???
> > }
> >
> > What I dont understand is why do I need the last else statement?
>
> You shouldn't.
>
> > Isnt
> > the result of $mail->Send() completed if I only check for
> > !$mail->Send()?
>
> Yes.
>
> > Maby it would be better to write like this :
> > if(!$mail->Send()) {
> > echo $lang_error['mailer_error'] . "<br>\n";
> > } else if ($mail->Send()){
> > // Why do I need this one???
> > }
> >
> > The above would in my belief send two mails, atleast my logic tells
> > me that.
>
> I'm not familiary with phpMailer, or exactly how the Send method words,
> but the code
> above would end up calling the Send method twice. If the Send method does
> in fact
> send (as its name suggests) then you probably don't want to call it twice
> when you
> intend to send the message only once. :)
>
> [snip]
> > Hope someone understand what Im wondering about here, hehe.
>
> In PHP (and every language that I've ever used...) an if statement's
> expression is
> evaluated regardless of whether there is an else portion, or an elseif,
> etc. For
> example, suppose we have a function foo() that is evaluated primarily for
> its side
> effects, but may return either true or false to indicate if the function
> was
> successful. This:
>
> if (foo()) {
> print "foo() was successful!\n";
> }
>
> is functionally equivalent to this:
>
> if (foo()) {
> print "foo() was successful!\n";
> } else {
>
> }
>
> The null else clause should have no effect whatsoever on the execution of
> the
> script. In fact, the following code snippets are all functionally
> identical:
>
> //Version one
> foo();
>
> //Version two
> if (foo()) {
>
> }
>
> //Version three
> if (!foo()) {
>
> } else {
>
> }
>
> In all three cases foo() is evaluated just once.
>
> Something else you should be aware of: When the expression in the if
> statement is a
> compound expression (it contains multiple expressions), then the PHP
> parser uses
> "lazy" or "short-circuit" evaluation. This means that the parser only
> evaluates the
> portions of the expression that are necessary to calculate the result of
> the entire
> expression. An example:
>
> if (foo() && bar()) {
> //Do stuff
> }
>
> In the above example, foo() is evaluated first. If foo() returns false,
> bar() is
> not evaluated at all. The reason is that no matter what bar()'s return
> value is,
> the entire expression can only be false. Since the parser has already
> determined
> the final result, it has no need to evaluate any further terms.
> Similarly:
>
> if (foo() || bar()) {
> //Do stuff
> }
>
> In this example, bar() will not be evaluated if foo() returns true, but
> will be if
> foo() returns false. These are obviously simple examples, but basically
> the parser
> only evaluates the terms that are necessary and doesn't go any further.
> This can be
> used as a type of flow control to have certain functions/methods called
> only if
> another returned true or false. For example, the following two code
> snippets are
> functionally identical:
>
> //Version one
> if (foo()) {
> bar();
> }
>
> //Version two
> if (foo() && bar()) {
>
> }
>
> As far as your specific problem, I suspect that there are factors at play
> that you
> are not aware of. Either you have run across a bug in the PHP parser
> itself
> (unlikely), or you are inadvertently making other changes when you add the
> else
> clause. I would suggest using basic debugging techniques to echo/print
> the contents
> of the body string at various points to see what it contains. You may
> need to drill
> down into the actual source code for the Send() method to see what it
> things the
> body string is. If something is happening to this value this approach
> should reveal
> where it's occuring.
>
> HTH...
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php