Re: array walk and class member functions

From: Date: Wed, 12 Jan 2005 13:19:18 +0000
Subject: Re: array walk and class member functions
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-206178@lists.php.net to get a copy of this message
Thanks very much for the help - both methods work fine. I'd had a look at the array_walk manual, but didn't realise that the second param would accept an array - that's really cool! I don't like the function_exists method much, as I frequently overload class members. Not needed now as I have the worker defined as a private function and can access it from the public one as array_walk($anArray,array($this,'aFunction'); Thanks Tom Jochem Maas wrote:
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 (#206178) next »