Web lists-archives.com

Re: [PHP] Difficulty with semicolon




> 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)

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