Correct, it would be harder to have a typo in the do..while() because it would complain about a missing while(). do; { ... } // <-- syntax error, expected while while (!doSomething()); If you wanted an empty in there, you'd just use while() by itself. do /* keep trying... */ ; while (!doSomething()); And this, ladies and gentlemen, is why putting the opening brace on the line above is the *correct* way to write these constructs! ;) It makes these typos less likely because they stand out as obviously broken: if (...) {; // <-- tho this is syntactically correct and will cause no problems when run; it's just an empty statement ... } and if (...); { // <-- the situation you found yourself in, but probably less likely to occur this way ... } Cheers, David On Wed, Apr 18, 2018 at 3:06 PM, Jeffry Killen <jekillen@xxxxxxxxxxx> wrote: > > > On Apr 18, 2018, at 2:49 PM, Jeffry Killen <jekillen@xxxxxxxxxxx> wrote: > > > > > >> On Apr 18, 2018, at 1:59 PM, David Harkness <david.h@xxxxxxxxxxxxxxxxx> > wrote: > >> > >> Unfortunately, empty statements are sometimes needed in real-world code. > >> > >> while (!keepTrying()) > >> /* keep trying... */ ; > >> > >> I added the indentation for clarity. We enforce the use of braces even > for one-line blocks like this to help. > >> > >> while (!keepTrying()) { > >> /* keep trying... */ ; > >> } > >> > >> That, however, wouldn't have solved your typo. Since we can't remove > the ability to have empty statements, one could argue for an option to > enforce braces for all blocks, but I expect the developers would deny such > a request with, "just don't make typos!" :) This is where a linter can > help. You can tell PhpStorm and other editors to disallow one-line blocks > without braces, and they would flag that line for you. > >> > >> Cheers, > >> David > >> > >> > > > > Thanks for the reply. > > In an attempt to test an intercept a variable value early in a function > execution for an async request, > > I put in a call to file_put_contents and write a text file with the > variable value so I could open the file and > > see what its status and value was. Then there re is a return statement > so the rest of the code would not run. > > I got a warning: code following return is unreachable. > > > > Also your first example might look in code like > > > >> while (!keepTrying()) /* keep trying... */ ; > > > > Yes the semicolon occurs after the closing parenthesis but it is also > after the the last closing parenthesis in the > > construct: something like > > > > do(s) > > {// code; } > > while(x); > > > > but if you had > > do(s); > > { // code} > > while(x) > > OOPS; I don't think I should have had do() > So it would be > > do > > { // code} > > while(x) > and > > do; > > { // code} > > while(x) > JK > > > > > I presume the code after do(s); would run once: would this cause a parse > error for trying to reconcile the while statement > > because the do statement needs an associated while statement? > > I would think so. I have never used do/while and never had success using > while statement, accept where it is already part > > of code I have copied into my scripts and published as freely usable. > > > > But, nonetheless, it is my task to avoid typos. > > > > JK > >> > >> > >> On Wed, Apr 18, 2018 at 1:28 PM, Jeffry Killen <jekillen@xxxxxxxxxxx> > wrote: > >> Hello; > >> This is the second time I have had to deal with this issue. > >> It is the result of my own typing errors. But I thought it would > >> be worthwhile sharing the implicit problem. > >> > >> You may notice the line marked '//<<<' There is a semicolon immediately > >> following the closing ')'. > >> > >> This is part of a function to create a directory with a default > index.php file > >> This code would not run if the directory had not been created > successfully. > >> > >> What happened was that the error implied by file_put_contents returning > false > >> was sent: EVEN though the file WAS actually created. It appears that > the semi > >> colon caused the false value to be converted to true and the error was > sent. > >> Or it just canceled the conditional test and the error block was run > with out it. > >> (I didn't think it was possible). > >> > >> So, the take away is that it would be worthwhile for a syntax error to > the issued > >> in this case. I can't think of any conditional or looping construct > that would use > >> a semicolon at this location usefully. And lord knows that if you leave > one out > >> where it needs to be, you hear about it. > >> > >> $_indTxt = "<?php\n/* code */;\n"."?".">"; > >> if(file_put_contents($_tar."/index.php", $_indTxt) === false); // <<< > >> { > >> $_out['error'] = $_errHead." file named ".$_tarShrt."/index.php > file not created"; > >> return $_out; > >> } > >> > >> Thanks for time and attention. > >> JK > >> -- > >> PHP General Mailing List (http://www.php.net/) > >> To unsubscribe, visit: http://www.php.net/unsub.php > >> > >> > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >