|  | Posted by Dominic on 05/05/06 05:14 
I've written a bunch of classes in PHP5 that correspond to various data structures on the client xhtml.  Each structure is ajax enabled, and sends a
 request back to the server via ajax that identifies the calling object's ID.
 I use the same ID on the clientside and serverside.  Using this information,
 I can identify the corresponding instance on the server that was clicked on
 the client and process the data using a special handler function.  Here's
 where my problem comes in.
 
 Each object on the server has a variable called "handler" which holds the
 function that will be used to process the ajax request.  If the function is
 in the global scope, I have been able to pass the function name as text to
 the ajax processor object and call the function without parameters.
 However, I would like to assign a function from within the class to be the
 default handler if no other handler is assigned.  That function never makes
 it to the ajax processor object. I can't seem to pass it or reference it.
 
 Let me try to explain with an example, edited down for the sake of brevity:
 <?
 function process(){ // processor function in the global scope
 // grab the ajax request (a global variable)
 // do something
 }
 class Tab {
 var $handler;
 function __construct(){
 // generates a tab on the client that makes a request to the server via
 ajax
 }
 function getHandler(){
 if (isset($this->handler))
 return $this->handler;
 else
 return "differentProcess"; // THIS IS THE PART THAT NEVER WORKS
 // I HAVE TRIED "$mytab->differentProcess",
 "$this->differentProcess", etc...
 }
 function setHandler($handler){
 $this->handler = $handler;
 }
 function differentProcess(){ // processor function in the scope of this
 class
 // grab the ajax request (a global variable)
 // do something else
 }
 }
 class Ajax { // Ajax class to handle the request from the client (I removed
 most of the non-pertinant stuff)
 static function process(){
 $thisid = self::$clientObject->id;
 global ${$thisid};
 $handlerfcn = ${$thisid}->getHandler(); // THIS GETS THE HANDLER
 FUNCTION AS TEXT
 $handlerfcn(); // THIS IS THE KEY FUNCTION THAT CALLS WHATEVER THE
 HANDLER WAS
 $responsearray = self::$response->getArray();
 echo self::$json->encode($responsearray); // stringify the response and
 return it to the client
 }
 
 $mytab = new Tab;
 $mytab->setHandler("process"); // THIS WORKS. The Ajax class calls the right
 function when a request is made.
 // however the default handler within the Link class does not work.
 ?>
 Am I missing something?  Can I simply not do what I am trying to do in PHP?
 Maybe there is something I can do with referenced functions?
 
 Thanks to anyone who has made it this far in reading my problem.  I look
 forward to any and all responses.
 
 Best,
 Dominic
  Navigation: [Reply to this message] |