On Wed, Mar 29, 2017 at 11:10 PM, dmitr y <[email protected]> wrote:
> Hello, dear coders.
> I'm using php for a year and it's being my favourite language. Also I'm
> using some bookkeping languages which is based on php syntax but ';' on the
> end of the line is not neccesary on it.
> So I can't understand why syntax needs symbol ';' on the end of every line,
> if it also ends by 0Ch and 0Dh. Is there a possibility to interpretate php
> code without ';' on the end of the line, and make it not necessary?
>
> Maybe some compilation parameter or directive at code?
>
> Best regards,
> Dmitry
>
Dmitry,
It is not necessary to end each line with a semicolon (the ';'), it is
however necessary to terminate each statement (or instruction) with one.
It's very common to only have one statement per line; which is why is seems
that it is required on every line.
There are several places this is not the case:
- Any block opening/close: e.g.
if/while/for/foreach ... {
// or it's close, or a comment for that matter!
}
- An unfinished statement:
echo $foo .
$bar // concat (.) operator can be here, as above, or on the next
line:
. $baz; // only semicolon here, to finish the statement
- Preceding a closing PHP tag (?>) as this also terminates a statement:
echo $foo ?>
<?php
// or
echo $bar
?>
Alternatively, you may have MORE than one statement per line:
- echo $foo; return $bar;
- syslog(LOG_ERR, "Something went wrong!"); exit;
- header("Location: /foo/bar"); exit;
Notice each of these has two statements. (Note: I don't think any of these
are particularly good ways to write readable code, but they are all
syntactically valid code).
While I know some languages make semicolons optional (javascript), or omit
them entirely (python), semicolons in PHP will not be going away (or
optional) any time soon.
Even a language like Go where they are optional, and largely discouraged,
it can be used to explicitly allow the initialization of a local (only
exists in the scope of the if statement) variable prior to the condition:
if err := DoSomething(); err != nil {
// initialization before ; condition {
return err // no semicolon necessary
}
I hope this helps!
- Davey