Re: Nested functions

From: Date: Sat, 09 Feb 2002 23:54:02 +0000
Subject: Re: Nested functions
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-84145@lists.php.net to get a copy of this message
On Sat, 2002-02-09 at 15:40, DL Neil wrote: > Hi, > Have been experimenting with the array_walk function and a little array debug print facility, > but ran into a > problem with nested functions. The code can be written with nested functions and successfully > executed once; but > when repeatedly executed an error appears. > > Can one code user-defined functions nested within one another Yes. > - and repeatedly execute them? No. ;) > The PHP Manual: Chapter 12. Functions, says: > "A function may be defined using syntax such as the following: > ... > Any valid PHP code may appear inside a function, even other > functions and class definitions." This is correct. As you know, the thing is that execution keeps running into that function declaration every time the containing function is run, tries to declare the function, and fails. Essentially: while you *can* do nested functions in PHP, don't. :) There really isn't any good reason to, anyway--except for (perhaps) a wee bit of namespace clarification. > Here is some test-bed code: > <?php > > Function ShowList( $title, $aList ) > { > > Function FnNested( $item, $key ) > { > echo "<br>$key=" . $item . "~"; > } //end of FnNested > > echo "<br>Listing array=$title: n=" . count( $aList ); > array_walk( $aList, "FnNested" ); > } //end of function ShowList > > //mainline code > $aLocated = array( 'zero', 'one', 'two', 'three' ); > ShowList( "Located1", $aLocated ); > ShowList( "Located2", $aLocated ); > ?> There really isn't any reason to do this; you could achieve the same thing like so: <?php error_reporting(E_ALL); function FnNested( $item, $key ) { echo "<br>$key=" . $item . "~"; } //end of FnNested function ShowList( $title, $aList ) { echo "<br>Listing array=$title: n=" . count( $aList ); array_walk( $aList, "FnNested" ); } //end of function ShowList //mainline code $aLocated = array( 'zero', 'one', 'two', 'three' ); ShowList( "Located1", $aLocated ); ShowList( "Located2", $aLocated ); ?> Hope this helps, Torben -- Torben Wilson <torben@php.net> http://www.thebuttlesschaps.com http://www.hybrid17.com http://www.inflatableeye.com +1.604.709.0506

« previous php.general (#84145) next »