PHP 4.0 Bug #6156 Updated: Object loosing an array property
| From: | Bug Database | Date: | Tue, 15 Aug 2000 17:31:13 +0000 |
| Subject: | PHP 4.0 Bug #6156 Updated: Object loosing an array property | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-29017@lists.php.net to get a copy of this message | ||
ID: 6156
User Update by: tite@wolstudios.com
Status: Feedback
Bug Type: Other
Description: Object loosing an array property
I guess you mean an explanation of the algorith with code explanations. If it is not enough... just
tell me.
func_plant starts at motor_plantilla, where $planti is the file name of our template. It creates a
new instance of bucle and fills out some properties. Once done this, it calls lector_plantilla, that
is supposed to read that file contained now in $Plantilla which is a global variable.
lector_plantilla will read that file and fill the instance of bucle that recieves with every line of
the fille (property lineas). Before asigning it to the object, the line is parsed callin parser().
parser() will return untouched the lines that have no template tags (this means text contained
between @% and %@). Our tags contains @%command:params%@. If it finds a tag, it will call the
function asigned in $parser_func for that command with 2 params, the object bucle and the params
that the tag had.
in datos_db() and load_img() the array property of the bucle object gets filled with the values in
params. $params contains table_name.field_name. As you can see by the salida() function, the object
got filled propperly :
salida("añadido $tabla $campo en while de ".$oBucle->tabla."<bR>\n");
salida("resultao[0][0] = ".$oBucle->tablas[0][0]."<BR>\n");
salida("ya tenemos ".sizeof($oBucle->tablas)." tablas <BR>\n");
output:
añadido Maestro_respuestas nombre en while de Preguntas
resultao[0][0] = Preguntas
ya tenemos 2 tablas
So, the object gets filled propperly. Once done this, it returns same thing with a w in front. The
sense of doing this, is to have all field names and tables whenever the function scanner() is
called, so this function will make a query to the mysql with those fields on the select part.
in do_where() a new instance of bucle is created hanging from the current instance. This new
instance is linked to the parent instance through the propperty bucle->padre. Once done this, the
lector_plantilla() is called up again so the lines contained between this @%where:...%@ and the
following @%end-where:...%@ are assigned to this new instance of bucle. After this is done, the
string @%wwhere:...%@ is returned to be assigned as a new line of the father instance so when
scanner gets to it knows that it has to jump to a son instance and keep on parsing the son's
lines before finishing these lines.
scanner() will go over all the memory nested of instances of bucle (after doing the query with the
fields contained in bucle->tablas) and re-parse it. The different thing this time is that the
tags (@% %@) will be replaced by the value in the DB that corresponds to it.
wdo_where() is called when the parser detects a wdb: tag. This function has to call scanner with the
next son instance, so those lines get parsed before the lines from the actual instance gets parsed.
My problem is that when scanner() is called this second time from wdo_where() with the son's
instance. The son's instance lost the array property tablas, but it didnt loose any other
propperty value.
I don´t know if this explanation satisfied your request, I hope so. If there are still doubts,
contact me.
Thank you in advance.
Josafat Moragrega Fernandez
Full Bug description available at: http://bugs.php.net/?id=6156