|
Posted by Tom on 10/04/58 11:05
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
>>
>
>
>
Navigation:
[Reply to this message]
|