ID:               17101
 Comment by:       madsen at sjovedyr dot dk
 Reported By:      destes at ix dot netcom dot com
 Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: All
 PHP Version:      4.1.2
 New Comment:

Just reporting that a } might be missing somewhere would be a great
improvement, at least until the above mentioned solution is
implemented...

I've had heaps of ppl asking me what the error in "this line (?>)"
was.. :)


Previous Comments:
------------------------------------------------------------------------

[2002-05-08 18:36:02] destes at ix dot netcom dot com

Reopening issue, see comments.

------------------------------------------------------------------------

[2002-05-08 17:08:41] destes at ix dot netcom dot com

Even providing the start of the If structure that is unclosed - even if
it has nested Ifs - would still provide useful functionality.  When in
doubt, go with the earliest one.  That in itself will greatly narrow
the range of possibilities.

I should also note that in your example, in both possible cases, it is
the closing brace for the FIRST if that is missing.  Even if the second
one were nested inside the first one, the missing brace would be for
the first If statement, so you could safely report "Parse error:
Unclosed If Structure beginning on line ____" and it would be greatly
useful.

I admit that there is no way to determine where the closing brace
should go.  However, you can (At the very least) determine the highest
level If structure which was never closed - and report that line.

Please let me know if i'm not making sense, which happens often =)

Thanks for your blindingly-fast reply.

-Steve

------------------------------------------------------------------------

[2002-05-08 14:54:41] [EMAIL PROTECTED]

There is no way how PHP can detect it.
Consider the following (bogus) script:
if($foo) {
...
if($bar) {
...
}
How can PHP know which brace is missing?
It can be
if($foo) {
    ...
}
if($bar) {
    ...
}
but it can also be
if($foo) {
    ...
    if($bar) {
        ...
    }
}
If you have a good idea how to detect it, please let us hear.

------------------------------------------------------------------------

[2002-05-08 14:36:56] destes at ix dot netcom dot com

A common scripting oversight is to forget to properly close control
structures bounded by curly braces such as if:

if ($var) {
        $foo = 1;
        $bar = 2;
/* forgot the } */

...

When parsing this, PHP reports that the error occurred on the last line
of the script - however many lines there are.  For scripts that run
many thousands of lines, and contain hundreds of control structures,
this means a huge amount of time spent going over the entire code
looking for the bad structure.

It occurs to me that PHP should be able to determine where the START of
the unended control structure is, and raise the parse error indicating
that line (instead of the last line of the document).  Adding this
feature would greatly decrease debug times for people who occasionally
make errors like these.

Thanks,
Steve

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=17101&edit=1

Reply via email to