Re: Difficulty with semicolon
| From: | David Harkness | Date: | Wed, 18 Apr 2018 20:59:57 +0000 |
| Subject: | Re: Difficulty with semicolon | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-326439@lists.php.net to get a copy of this message | ||
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
On Wed, Apr 18, 2018 at 1:28 PM, Jeffry Killen <jekillen@prodigy.net> 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
>
>