>What is the "and" "or" statement in php? > >I need this to see if the first statement is whatever, and or the second >statement is whatever... > >if (!isset($PHP_AUTH_USER) "and or" blah($blah)) {}
"and" and "or" mean pretty much what they would in English: The expression "x AND y" only returns "true" if both x and y are "true" The expression "x OR y" returns "true" if either one of x or y are "true" One nifty thing, though, is that if PHP *knows* the whole statement will come out "true" (or "false") it won't bother with the rest of it. This is known as a short-circuit. For example, consider this: $x = TRUE; if ($x or really_slow_complicated_function()){ } As soon as PHP figures out the $x part (very quickly) it won't even *BOTHER* to call that really complicated function because it doesn't *need* to call it in order to complete the expression. PHP *KNOWS* that it's all gonna come out "true" anyway. So the program just skips all the complicated crap in really_slow_complicated_function() and goes on with life. And that's good. Well, it's "good" more often than it's "bad"... Sometimes you end up wanting that function called no matter what. No problem: $x = TRUE; $y = really_slow_complicated_function(); if ($x or $y){ } The most common example of the "or" situation is: $result = mysql_query($query) or die(mysql_error()); In this case, if mysql_query() "works" then PHP "knows" not to dink around with the die() stuff because there's no point -- The mysql_query() part will guarantee the whole thing to come out "true" anyway. *IF* the mysql_query() part works, of course -- If it breaks, you get your death and the error message. It's not a Good Idea to leave die(mysql_error()) in your code on a real server, though. It's too easy for a hacker to break your SQL, force the error message to come out, and that error message could reveal *WAY* too much about how your site it built and give them "insider" knowledge of the layout of your site/server to break in. A *much* better usage would be: $result = mysql_query($query) or error_log(mysql_error()); Your error messages will be in your Apache error logs (assuming a default php.ini) and while that's a bit more work to dig out, it's also not likely to expose your inner workings to hackers. One of the things I hate the most about VBScripts is boolean expressions don't short-circuit, so you end up having to nest if/else statements like crazy to write decent error-checking code. Ugh! The same sort of thing happens with "and" when PHP *knows* it's going to turn out FALSE anyway: $x = FALSE; if ($x and really_complicated_function()){ } Here, PHP can just skip the complicated crap, because $x if FALSE, so the $x and ??? *must* be FALSE. PHP also has && as well as || which are *exactly* like "and" and "or" *EXCEPT* for the order of precedence. If precedence isn't real clear, though, here's a rule of thumb that will probably serve you well: Inside of if() while() for() and such-like, stick with && and || Only use "or" for the " or die(...)" clause. In the unlikely event that you ever really *NEED* "and" or "or" in an if() while() for() part, you'll figure it out when the need arises. -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php