References to methods of parent object

From: Date: Tue, 13 Jun 2000 03:14:44 +0000
Subject: References to methods of parent object
Groups: php.general 
Request: Send a blank email to php-general+get-1685@lists.php.net to get a copy of this message
I am trying to call a method of a parent object and failing to see how it can be done. I have seen several similar references, but none that address this problem. I am instanciating a class, and in the constructor function, I am instanciating the callback class as a local variable. I want the callback class to call methods of the current class instanciation. Is there a way to do this? I have attached the relevant code below. Thanks. Peter Bowen <?php require("callback.class.php"); class asx { var $entrylist; //array of polymorphic objects using base class entry; var $ac; //int; current entry of array var $status; //string; last element, if in a block function asx($fh) { $this->ac = 0; $this->status = ""; $cb = new string_callback; $cb->parent = $this; $cb->register("/<REF(>|(\s+[^>]*>))/i","\$this->parent->ref",2); $cb->register("/<ENTRY(>|(\s+[^>]*>))/i"," \$this->parent->openentry",1); $cb->register("/<ENTRYREF(>|(\s+[^>]*>))/i"," \$this->parent->entryref"); $cb->register("/<\/ENTRY[^>]*>/i","\$this->parent->closeentry"); $n=0; while ($fc = fgets($fh,1024)) { $n++; $cb->string($fc,$n); } } function openentry($text, $lineno) { if (empty($this->status)) { $this->status = "entry"; $this->ac = sizeof($this->entrylist) + 1; $this->entrylist[$this->ac]=new asxmisc; $this->entrylist[$this->ac]->start = $lineno; $this->entrylist[$this->ac]->type = T_ENTRY; $this->entrylist[$this->ac]->source = F_ORIG; } else { die("Invalid File"); } } function closeentry($text, $lineno) { if ($this->status=="ref") { $this->status = ""; $this->entrylist[$this->ac]->end = $lineno; } else { die("Invalid File"); } } function ref($text, $lineno) { if ($this->status=="entry") { unset($pcrear); $this->status = "ref"; $this->entrylist[$this->ac]->fromstring($text); } elseif ($this->status=="ref") { unset($pcrear); } else { die("Invalid File"); } } function entryref($text, $lineno) { $delete = FALSE; if ($this->status=="") { $this->ac = sizeof($this->entrylist) + 1; preg_match("/ref\s*=\s*(?:(?:\"([^\"]*)\")|([^>]*)). *\/\s*>/i",$text,$pcrear); if (!empty($pcrear[1])) { $tstr = $pcrear[1]; } else { $tstr = $pcrear[2]; } unset($pcrear); preg_match("@/([^/\?][^/\?]*)\?@",$tstr,$pcrear); if ($pcrear[1]=="register.php") { $this->entrylist[$this->ac]=new asxmisc($tstr); $this->entrylist[$this->ac]->type=T_REGISTER; } elseif ($pcrear[1]=="getad.php") { $delete = TRUE; $this->entrylist[$this->ac]=new asxmisc($tstr); $this->entrylist[$this->ac]->type=T_STOPSET; } else { $this->entrylist[$this->ac]=new asxmisc($tstr); $this->entrylist[$this->ac]->type=T_ENTRYREF; } $this->entrylist[$this->ac]->start=$lineno; $this->entrylist[$this->ac]->end=$lineno; $this->entrylist[$this->ac]->source=F_ORIG; } else { die("Invalid File"); } } } ?> the callback.class.php has the following: <?php class string_callback { var $callbacks; var $parent; function string_callback () { $this->callbacks = array("trigger" => "", "function"=>"", "ordinal" =>1); } /* String Call back has the following properties: callbacks = array of callback objects/arrays callback["trigger"] = trigger regxep callback["function"] = callback function callback["ordinal"] = ordinal for execution order registerd functions shall have a single parameter, the portion of the string that the regexp represents String Callback has the following methods: register($trigger, $function [, $ordinal]) register callback function $function to be called when $trigger is found. Ordinal is for order of the array of registered callback functions string($text, $lineno) function to check string for registered regexps and call callback functions. Functions will be called as $function($match, $lineno) where match is the part of the string that the regexp matched and lineno is the ordinal line number. All functions must be complete before the next regexp is checked. If ordinal is not specified, then the function will register at the current end of the array and will be assigned an ordinal of max(ordinal)+1 */ function ordsort($a, $b) { if ($a["ordinal"]==$b["ordinal"]) return 0; return ($a["ordinal"] > $b["ordinal"]) ? 1 : -1; } function register($trigger, $function, $ordinal=-1) { if ($ordinal==-1) { $arlen = sizeof($this->callbacks); $maxord = $this->callbacks[$arlen-1]["ordinal"]; $ordinal = $maxord + 1; } $push = array("trigger" => $trigger, "function" => $function, "ordinal" => $ordinal); array_push($this->callbacks,$push); uasort($this->callbacks, $this->ordsort); return TRUE; } function string($text, $lineno=-1) { $arlen = sizeof($this->callbacks); for ($i=0;$i<$arlen;$i++) { unset($retar); if (!empty($this->callbacks[$i]["trigger"])) { if (preg_match($this->callbacks[$i] ["trigger"],$text,$retar)) { $this->callbacks[$i]["function"]($retar[0],$lineno); } } } return TRUE; } } ?>

« previous php.general (#1685) next »