Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 07-jul-2005, 19:53   #1 (permalink)
barbazul ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 19
Problemas con una lista

Buenas, tengo una clase que armé de Lista doblemente enlazada ordenada.

el código de mi clase está en el siguiente link:

http://www.demiens.com.ar/LinkedList/LinkedList.zip

los archivos que armé son SortedList.php y test.php.

La idea de la clase es que es una lista que recibe el nombre de una función para comparar datos y lo utiliza para determinar en que posicion debe ir guardando la info.

Lo hice heredando de una clase de www.phpclasses.org que comprobé qeu funciona, y mi clase también funciona cuando la pruebo localmente, sin embargo cuando lo subo al servidor... se corta la lista por algún motivo. Lo más raro del asunto es por ejemplo, si estoy guardando un vector con varias posiciones y hago la prueba con distintas funciones que comparan diferentes posiciones del vector, con alguna funciona y con otras no.

Esto me está volivendo loco.. ya tuve el mismo problema en dos servidores remotos pero me sigue andando perfecto (exactametne el mismo script) en mi máquina.

Si alguien tiene la suficiente paciencia para checkearlo va a tener mi agradecimiento eterno.

para tener una demostración de cómo no funciona bien:
http://www.demiens.com.ar/LinkedList/test.php
__________________
I'm gonna Beta-test your girlfriend
barbazul está desconectado   Responder Citando
Antiguo 08-jul-2005, 13:18   #2 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
Los errores, en general, tienen que ver con las referencias.
El más crítico es no haber referenciado un par de métodos en ListNode
Código PHP:
function setPrevious($node){ 
   
$this->previousNode = &$node;

Debería ser así
Código PHP:
function setPrevious(&$node){// Aquí está la diferencia. 
   
$this->previousNode = &$node;

Del mismo modo con setPrevious().

También en la clase LinkedList se referencias objetos que no lo necesitan. No debes referenciar objetos al pasarlos como parámetros en funciones o métodos.
Por ejemplo:
Código PHP:
$newNode $this->getNewNode($object);
//...
$this->head->setNext(&$newNode); 
Provocará un Warning relacionado con "Call-time pass-by-reference".

La manera de hacer esto es
Código PHP:
$newNode = &$this->getNewNode($object);// Aquí lo referencias
//...
$this->head->setNext($newNode);// Aquí ya no. $newNode ya es una referencia. 
Luego tienes que asegurarte que getNewNode() reciba ese parámetro por referencia, y que además devuelva una referencia.
Tú tienes:
Código PHP:
function getNewNode(&$object){// Aquí te estás asegurando de referenciar lo que recibes, peor no lo que devuelves.
return new ListNode(&$object);// $object ya es una referencia, no debes referenciarlo aquí. Producirá Warning

Debería ser algo así:
Código PHP:
function &getNewNode(&$object){// Ahora también referencias lo que devuelves.
$new = &new ListNode($object);// Referencias el objeto nuevo, peor no el parámetro que envías (que ya era una referencia).
return $new;

Hice los cambios necesarios y al menos el ejemplo funciona bien. Por favor, verifica que todo esté correcto.
http://nuestrophp.com/Linked_List.zip

Los cambios que hice son los mismos que te expliqué más arriba, pero en todas las líneas en donde ocurre.

Saludos
jpinedo está desconectado   Responder Citando
Antiguo 09-jul-2005, 00:29   #3 (permalink)
barbazul ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 19
Antes que nada te quiero agradecer por todo el tiempo que te has tomado en leer el código, sé que era recontra extenso y valoro la enorme molestia de tu parte.

MUCHAS GRACIAS

Por otro lado te agradezco el qeu me hayas liberado de la culpa de uqe no me funcione mi lista porque los errores uqe marcaste parecieran estar todos en el código que me baje (la clase padre de la que hereda mi clase SortedList :D ).


YA MISMO ME POGO A REVER TODO ESTO
__________________
I'm gonna Beta-test your girlfriend
barbazul está desconectado   Responder Citando
Antiguo 09-jul-2005, 18:39   #4 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
Hola:
La mayor parte de los errores están en el código que bajaste, pero tú has heredado también parte de ellos (y no me refiero a que tu clase herede de LinkedList). En SortedList (tu clase) también había varios errores al pasar parámetros por referencia cuando se llamaba a un método.

Pero, como te dije, revisa bien el código porque es posible que en partes que no están contempladas en test.php siga habiendo error.

Saludos
jpinedo está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:29.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93