RE: [PHP] Detecting Multi-Scope Variables
| From: | Tommy Pham | Date: | Tue, 01 Feb 2011 08:12:29 +0000 |
| Subject: | RE: [PHP] Detecting Multi-Scope Variables | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-311108@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Brad Lorge [mailto:brad@lorge.com.au]
> Sent: Monday, January 31, 2011 9:53 PM
> To: php-general@lists.php.net
> Subject: [PHP] Detecting Multi-Scope Variables
>
> Hello All,
>
> I am new to the list so please be gentle :)
>
> I am working on a PHP framework and have run up against a functionality
> hurdle which I keep falling at. Basically, I have three mechanisms which
all
> function in a similar way and require this functionality: templating,
event
> handling and "action handling". Within the core code of the application,
as
> is common with many applications with plugin architecture, I pass a number
> of parameters to functions which have hooked into a particular "event".
Part
> of the mechanism is that parameters can be passed by reference to allow
> for the listeners to make modifications.
>
> $username="bob";$account_type="ISV";$password="fishbum";
>
> register_action_listener('process_user', function($username,
> $account_type, $password){$username.="." . $account_type;} // Or
> whatever
>
> call_action('process_user', &$username, &$account_type, &$password);
> //Result: $username == "bob.ISV"
I think you meant to use [1].
>
> Now, what I am trying to do is establish a method to prevent the "hook"
> functions from making changes by reference without reference explicitly
> being passed to them by the calling code.
>
Perhaps you should review [2] and see if your logic works with your
'call_action'.
> I have thought of a method which simply makes a copy of all the parameters
> for each listener within call_action(), however what I would really love
is a
> function which returns whether or not the supplied variable is available
in
> multiple scopes or is in the original scope which it was initialized in.
> Does anyone know of a way to achieve this?
>
> Regards,
> Brad
Happy coding,
Tommy
[1] http://php.net/call_user_func
[2] http://php.net/references