NotionCommotion Posted February 4, 2017 Share Posted February 4, 2017 For instance, are the last three semicolons required? Whether are not, is it best practice to or not to include? $c['errorHandler'] = function($c){ return function ($request, $response, $exception) use ($c){ if ($exception instanceof NotFoundException){ return $c['notFoundHandler']($request, $response); } else { return $c['response']->withStatus(500) ->withHeader('Content-type: text/html') ->write('Generic error'); }; }; }; Also, from a formatting perspective, what is the best practice where to include them (i.e. on the same line, or the following line)? ->write('Generic error'); ->write('Generic error') ; Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/ Share on other sites More sharing options...
benanamen Posted February 4, 2017 Share Posted February 4, 2017 (edited) As in C or Perl, PHP requires instructions to be terminated with a semicolon at the end of each statement. The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block. The closing tag for the block will include the immediately trailing newline if one is present. The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include or require, so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files. http://php.net/manual/en/language.basic-syntax.instruction-separation.php The semi-colon at the start of the line is programmer preference. When there are many lines it is very easy to spot a missing one. Pick a style and stick to it. I only see it used for SQL statements. Edited February 4, 2017 by benanamen Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542291 Share on other sites More sharing options...
ginerjm Posted February 4, 2017 Share Posted February 4, 2017 The question is really a no-brainer. Just use the semi in all appropriate places. Don't bother trying to outthink the compiler as to when you can "get away" with not using it. It will only come around to bite you in the rear. Consider this: You get used to leaving the semi off the last line of a brace-enclosed block of code. Then you add a new line to the end of that block and - voila! - you have a compiler error. So now you go back and correct it and wonder why you left such a simple thing off that line just to save a keystroke, only to lose time later on. As Benanamen said above - php wants one at the end of each instruction. Why debate it? Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542292 Share on other sites More sharing options...
mac_gyver Posted February 4, 2017 Share Posted February 4, 2017 (edited) a semi-colon is NOT required used after a } by adding them there, in addition to the wasted typing time and clutter, you are adding an empty php statement to the code, that php must parse when it examines the code. i'm not sure if this actually creates a php byte-code/token, that would then waste time during code execution too. Edited February 4, 2017 by mac_gyver 1 Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542293 Share on other sites More sharing options...
NotionCommotion Posted February 4, 2017 Author Share Posted February 4, 2017 (edited) Do I understand all your positions correctly? Benanamen says it is optional, however, sometimes advantageous not to include. ginerjm says to include them all the time in case the code is later changed. mac_gyver says not to include them. EDIT. I went searching my code for where I did use them after curly brackets, and came across this. Not the same context of my original question, but thought I would post this just in case someone in the future views this post. $arr[$prop]=$this->{$prop}; //semicolon is required Edited February 4, 2017 by NotionCommotion Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542295 Share on other sites More sharing options...
mac_gyver Posted February 4, 2017 Share Posted February 4, 2017 the first two answers don't have anything to do with your question. Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542296 Share on other sites More sharing options...
benanamen Posted February 4, 2017 Share Posted February 4, 2017 Benanamen quoted the Manual. Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542297 Share on other sites More sharing options...
ginerjm Posted February 4, 2017 Share Posted February 4, 2017 Mac_gyver says not to use them after a brace, which is a true statement. The brace is not a php instruction line. It is simply a wrapper, like a paren. Benanamen says to use and not use depending upon the situation. Wouldn't you really rather just develop a good habit and use them where required and not have to think about it? Basically you put one at the end of every statement except the IF statement. Of course there is probably some syntax/statement that I never use which will probably be pointed out in a few minutes. Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542298 Share on other sites More sharing options...
NotionCommotion Posted February 4, 2017 Author Share Posted February 4, 2017 Agree they should be included where required. They appear to be only required for very few applications. My new position is to not included them where they are not required but optional. <?php function foo($arr) { if($arr) { foreach ($arr->x as $value) { $x=$bla->{$value->bla}; } switch($bbb){ case asd: } } else { while($arr->x) { } } } Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542299 Share on other sites More sharing options...
kicken Posted February 4, 2017 Share Posted February 4, 2017 They are required after single statements. Braces surrounding function bodies or conditions etc are block statements and thus do not need a terminating semi-colon. They are required after assigning a closure function because that is a single statement (the assignment). 1 Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542300 Share on other sites More sharing options...
Jacques1 Posted February 4, 2017 Share Posted February 4, 2017 (edited) Whether or not semicolons are required has nothing whatsoever to do with curly brackets. It depends on the form of the statement. Control flow statements (if, while, ...) have no terminating semicolon. Statements of the form <expression> ; (which includes assignments, calls etc.) do require a semicolon. There's no such thing as an optional semicolon in PHP. When you add a semicolon where it doesn't belong, you're creating a new (empty) statement. Edited February 4, 2017 by Jacques1 Quote Link to comment https://forums.phpfreaks.com/topic/303101-when-are-semicolons-required-after-curly-brackets/#findComment-1542302 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.