Jump to content

conditional IF versus statement AND statement


infratl

Recommended Posts

hi, i came across this question recently. I often use conditional statements like:

<?php
[b]if[/b] (opendir($newdir)) {die('Directory already exists');}
?>

could i write that condition in this form:

<?php
opendir($newdir)) [b]and[/b] die('Directory already exists');
?>

what would be better performance-wise or what would be more appropriate coding? i've always used the [b]if[/b] construct, but i'm curious about the [b]and[/b] construct since the manual uses [b]or die[/b] in several cases.

what's the difference between using the
"statement1 [b]and[/b] statement2"
instead of
"[b]if[/b](statemente1) {statement2}"?

i know the above example is bad because i should really use file_exists() to test for the existence of the directory. however, if i were to do it with opendir, which one should i use, the [b]if[/b] or the [b]and[/b], and why?
Link to comment
Share on other sites

Where on earth have you seen this used in this way before???

I think you have something mixed up, the example you have given has no apparent use what so ever!!!!

I don't even think you can use and in this context either (saying that without trying it of course!!)
Link to comment
Share on other sites

ok, let me change up the example a bit like this:

say i have some code that reads:

<?php
if(file_exists($filename)) die('File already exists');
?>

couldn't i simply write it as:

<?php
file_exists($filename) and die('File already exists');
?>

wouldn't these two produce the same results? is there an advantage or disadvantage of using one over the other? i know the if condition is more readable than the and. but as far as performance and correctness of code how do they compare?
Link to comment
Share on other sites

1 ) Both parts of an AND expression are supposed to be boolean expressions evaluating to true or false. die() returns void.

2 ) Both parts should be evaluated to see if the whole expression gives true or false, therefore one would expect the die() to be executed in all cases.

I can only assume that this works only because of current deficiency in the PHP processor and shouldn't be relied upon, apart from being virtually unreadable to anyone having to maintain your code.

That's my $0.02 worth.
Link to comment
Share on other sites

[!--quoteo(post=365022:date=Apr 15 2006, 05:16 AM:name=Barand)--][div class=\'quotetop\']QUOTE(Barand @ Apr 15 2006, 05:16 AM) [snapback]365022[/snapback][/div][div class=\'quotemain\'][!--quotec--]1 ) Both parts of an AND expression are supposed to be boolean expressions evaluating to true or false. die() returns void.
[/quote]Well, wouldn't the same be true about an OR expression? Both parts are supposed to be boolean expressions. However, in the php manual, especially with the mysql functions, there are lots of examples like this one taken from [a href=\"http://us3.php.net/manual/en/function.mysql-fetch-array.php\" target=\"_blank\"]http://us3.php.net/manual/en/function.mysql-fetch-array.php[/a] :
<?php
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
......

[!--quoteo(post=365022:date=Apr 15 2006, 05:16 AM:name=Barand)--][div class=\'quotetop\']QUOTE(Barand @ Apr 15 2006, 05:16 AM) [snapback]365022[/snapback][/div][div class=\'quotemain\'][!--quotec--]2 ) Both parts should be evaluated to see if the whole expression gives true or false, therefore one would expect the die() to be executed in all cases.
[/quote]I don't think this is true because according to the manual AND and OR epressions are short-circuited. Meaning that, in an AND expression, if the first part is false, php won't evaluate the second part because, even if it did, the whole expression is already false. The same is true with the OR expression. If the first part is true, php won't evaluate the second part, because the whole expression is already true.

[!--quoteo(post=365022:date=Apr 15 2006, 05:16 AM:name=Barand)--][div class=\'quotetop\']QUOTE(Barand @ Apr 15 2006, 05:16 AM) [snapback]365022[/snapback][/div][div class=\'quotemain\'][!--quotec--]I can only assume that this works only because of current deficiency in the PHP processor and shouldn't be relied upon, apart from being virtually unreadable to anyone having to maintain your code.
[/quote]I don't think it's a deficiency as php was, again according to info in the manual, designed to have the short-circuit or lazy evaluation feature.

I do agree that it is pretty unreadable though. A programmer that's not used to seeing code written that way would probably take long to figure out what's going on.
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.