enveetee Posted February 9, 2015 Share Posted February 9, 2015 Hi As I get deeper into PHP I am always coming across a situation where I have multiple condition testing. I end up coding thus: If (condition){ } else { } This can get very messy when you get 4 or 5+ conditions to test for. In other languages, I have used loops and then use break out of the loop if a condition fails: WHILE(TRUE) if (!condition) { break; } break; } Can anyone comment or make a better suggestion pls Thanks Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/ Share on other sites More sharing options...
mac_gyver Posted February 9, 2015 Share Posted February 9, 2015 in programming, there are multiple different ways of accomplishing anything and the best answer depends on what you are actually doing. if each later test is preformed based on the result of the previous tests, you would need to write out the nested logic as needed. if the tests are independent and are just testing different values in one variable, you would instead use a switch/case statement or even simpler, a look-up array to map one value to another. short answer: it depends. do you have a specific problem you are trying to solve? Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/#findComment-1505231 Share on other sites More sharing options...
enveetee Posted February 9, 2015 Author Share Posted February 9, 2015 Thanks mac_gyver No, nothing specific, just a style question really, wanted to know what other people were doing. In the .NET world, I use a DO/LOOP and broke out of it as soon as a test failed - force of habit really Just curious Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/#findComment-1505234 Share on other sites More sharing options...
mac_gyver Posted February 9, 2015 Share Posted February 9, 2015 in the case of looping and testing values, again it depends. if this is data from a database query and all you are interested in is if the data was found, you would perform the test in the database query. if validating if a variable is one any of many permitted values, having the permitted values in an array and using php's array functions would produce the most efficient code, rather than looping until a value is found or not are found... Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/#findComment-1505236 Share on other sites More sharing options...
Psycho Posted February 9, 2015 Share Posted February 9, 2015 (edited) One thing I see a lot of, is people creating deeply nested logic for error checking in this fashion: if(notErrorCondition1) { if(notErrorCondition2) { if(notErrorCondition3) { if(notErrorCondition4) { //Perform actions for success scenario } else { echo "Error condition 4"; } } else { echo "Error condition 3"; } } else { echo "Error condition 2"; } } else { echo "Error condition 1"; } This irritates the hell out of me because it makes it nearly impossible to "view" the logic. The nested if/else statements are bad enough. But, the worst part is the separation of the condition check and the associated error. The first error check is associated with the last error result. 99% of the time, that logic can (and should) be rewritten to make it so you can "see" the logic. I always write my error condition to check for the presence of the error (not the lack of an error) so I can associate the error logic with the check. Using the above, here is one way it could be rewritten if(errorCondition1) { echo "Error condition 1"; } elseif (errorCondition2) { echo "Error condition 2"; } elseif (errorCondition3) { echo "Error condition 3"; } elseif (errorCondition4) { echo "Error condition 4"; } else { //Perform actions for success scenario } Edited February 9, 2015 by Psycho 1 Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/#findComment-1505253 Share on other sites More sharing options...
Werezwolf Posted February 11, 2015 Share Posted February 11, 2015 (edited) I completely agree with Psyco in most cases but if your typing mostly the same output you'll want to nest I have a general rule of of nesting at max is 3 if i go over i check if i can do the logic differently. Basically the flip side of the coin if(!isset($_POST["submit"])){// if there was no submit variable passed to the script (i.e. user has visited the page without clicking submit), display the form: if(!empty($_SESSION["MSG"])){echo '<div class="MSG">' . $_SESSION["MSG"] . '</div><br /><br />';}//easyer to nest this echo '<form name="LoginForm" class="formbox" id="LoginForm" action="index.php" method="post" /> Username: <input type="text" name="username" id="username"/><br /> Password: <input type="password" name="password"><br /> <input type="submit" name="submit" id="submit" value="submit" /> </form>'; unset($_SESSION["MSG"]); }//elseif do more stuff VS if(!isset($_POST["submit"]) && !empty($_SESSION["MSG"])){//There was a session message and if there was no submit variable passed to the script (i.e. user has visited the page without clicking submit), display the form: echo '<div class="MSG">' . $_SESSION["MSG"] . '</div><br /><br />'; echo '<form name="LoginForm" class="formbox" id="LoginForm" action="index.php" method="post" /> Username: <input type="text" name="username" id="username"/><br /> Password: <input type="password" name="password"><br /> <input type="submit" name="submit" id="submit" value="submit" /> </form>'; unset($_SESSION["MSG"]); }elseif(!isset($_POST["submit"])){// if there was no submit variable passed to the script (i.e. user has visited the page without clicking submit), display the form: echo '<form name="LoginForm" class="formbox" id="LoginForm" action="index.php" method="post" /> Username: <input type="text" name="username" id="username"/><br /> Password: <input type="password" name="password"><br /> <input type="submit" name="submit" id="submit" value="submit" /> </form>'; }//elseif do more stuff Edited February 11, 2015 by Werezwolf Quote Link to comment https://forums.phpfreaks.com/topic/294472-how-do-you-deal-with-multiplenested-ifelse-statements-styling-q/#findComment-1505414 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.