Re: array walk and class member functions

From: Date: Wed, 12 Jan 2005 12:39:32 +0000
Subject: Re: array walk and class member functions
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-206170@lists.php.net to get a copy of this message
Tom wrote:
Hi I'm batting my head against a wall on this one... I have a class that has a constructor which sets some initial conditions, and then a public function that does some work. I want to be able to call this function from an external array_walk call, but when I try and reference it as $myClass->myFunction in the array_walk call, I get an error back saying that this is an invalid function. eg) <?php include "../includes/aClass.class"; $myArray = array("item1"=>"firstItem", "item2"=>"secondItem"); $myClass = new aClass; array_walk($myArray,'$myClass->aMemberFunction');
try changing this line to: array_walk($myArray, array($myClass,'aMemberFunction')); or if you prefer to take the route of your second attempt read on...
?> As a workaround, I redifined the class so that there was a public function which made the array_walk call with the worker function defined internally as follows, but this throws another issue in that if I create multiple instances of the class then I get an error to say that the internal function is already defined ...
which is correct, you are trying to create this function multiple times.
*Fatal error*: Cannot redeclare aFunction() (previously declared in /usr/local/apache2/htdocs/includes/functions.php:23) in */usr/local/apache2/htdocs/includes/functions.php* on line *23*
class aClass {
    some other stuff, constructor etc
public function aPublicFunction($anArray) {
      global $aRetrunString;
           function aFunction($value, $key)
      {
           global $aReturnString;
           $aReturnString = $aReturnString.$value;               }
      array_walk($anArray,'aFunction');
      return $aReturnString;
}
wrap the function def. like so: if (!function_exists('aFunction')) { function aFunction($value, $key) { global $aReturnString; $aReturnString = $aReturnString.$value; } } OR define the function outside of the class e.g. function aFunction($value, $key) { global $aReturnString; $aReturnString = $aReturnString.$value; } BTW: using a global in the way you do in this function is a bad idea. array_walk() is defined as follows: bool array_walk ( array &array, callback funcname [, mixed userdata]) check out the manual for info on the last arg: http://nl2.php.net/array_walk
} Can anyone help me to get either solution to a working state? By the way... apache 2.0.49 php-5.0.2 Thanks very much Tom


« previous php.general (#206170) next »