php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #9250 Nested Functions are BAD, they make for inefficient debugging
Submitted: 2001-02-14 04:10 UTC Modified: 2002-01-06 13:15 UTC
From: dsifry at linuxcare dot com Assigned:
Status: Not a bug Package: Feature/Change Request
PHP Version: 4.0.4pl1 OS: Any
Private report: No CVE-ID: None
 [2001-02-14 04:10 UTC] dsifry at linuxcare dot com
If you have a missing close-bracket "}" somewhere in your code, the PHP parser tells you that the error is at the last line.  If you have a multi-hundred or thousand line file, this makes life a bitch.

Rasmus tells me that the reason for this behavior is because functions can be nested, which means that:

function a 
{
  function b
  {
  } 
}
is OK. This is a silly feature.  Why do you have it, for scoping reasons?  It means that you can't effectively tell where syntax errors occur.

Suggestion: Either make nested functions turned off by default but you can turn them on with a PHP global variable, like $PHP_BIZARRO_NESTED_FUNCTIONS = 1;

or

have the parser syntax set up so that it marks where a possible syntax error occurred (IOW it sees a possible nested function, but it could also be a syntax error), and if it reaches the end of the file with a missing "}" or two, that it displays the location where it parsed the nested function.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-01-06 13:15 UTC] jan@php.net
brackets are used for other controll structures as well, so disabling nested functions do not solve the problem. ->bogus
 [2010-03-09 02:59 UTC] benni at cipher dot is
nested functions make for grate walkers in recursive functions

BUT ! ONLY 
if the scope is limited with in the outer function  (witch it isn't)
AND can use same variables as outer function
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Mar 28 21:01:27 2024 UTC