Foros del Web » Programando para Internet » PHP »

Ayuda con una funcion dentro de una Class

Estas en el tema de Ayuda con una funcion dentro de una Class en el foro de PHP en Foros del Web. Mas consejos. NO hagas echo dentro de tus metodos. Crea una variable donde vas almacenando la salida y devuelvela. Que sea el script que crea ...

  #16 (permalink)  
Antiguo 22/02/2003, 14:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Mas consejos. NO hagas echo dentro de tus metodos. Crea una variable donde vas almacenando la salida y devuelvela. Que sea el script que crea el objeto el que se encarge de hacer el echo.

Y en tu consultaDb() no deberias acceder a la variable del $_GET. Tendrias que tener un metodo que de el valor a id_inicio. Por eso no te funciona bien la funcion mostarNumeroPaginas().

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 22/02/2003, 17:16
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
ok tomare en cuenta sus consejos.

Cluster si e visto la class de WebStudio y es bastante buena pero aún hay cosas que no entiendo y estoy empezando con esto.

Josemi, se que no deberia hacerlo pero no pude de otra forma

con ese
Código PHP:
if(!$_GET){ 
         
$sql.=" LIMIT 0,".$this->max_por_pagina;//fin if
         
}else{
         
$this->id_inicio=$_GET["id_inicio"];
       
$sql.=" LIMIT ".$this->id_inicio.",".$this->max_por_pagina;
         } 
Reviso si recibe algo por la url si no póngo el LIMIT a 0 si recibe algo pongo el LIMIT de acuerdo al id_inicio.


Saludos

PD: Toy mejorandola poco a poco
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #18 (permalink)  
Antiguo 22/02/2003, 17:59
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
El problema con esa forma es que hasta que no llamas a ese metodo $this->id_inicio no tiene un valor valido. Podrias hacer que se tenga que pasar como parametro al constructor, o en el peor de los casos, hacerlo directamente con el $_GET pero en el constructor. Porque creo que es en constructor donde se deberia inicializar. O crear otro metodo para darle el valor y llamar a ese metodo justo despues de crear el objeto.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #19 (permalink)  
Antiguo 23/02/2003, 11:05
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Gracias de nuevo.


Haber ahora la modifique por completo y tengo esto.

en localhost funciona , aun no le e podido probar en mi servidor (lycos anda de malas);

Ok aqui se los dejo

http://members.lycos.co.uk/masterdar....paginado.phps

y el uso

http://members.lycos.co.uk/masterdark1/usoclass.phps

A ver que tal va.


(pronto cuelgo una especie de web con las cosas que hago para no estar dando url´s a diestra y siniestra)


Saludos

PD: Si hay algo que se paresca a la clase de web-studio es por que en alguna cosas mire esa clase para entender.

Pero en ningun caso la e querido copiar.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #20 (permalink)  
Antiguo 23/02/2003, 15:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Sigues haciendo "echo" en tu classe .. Como te comentó josemi en otra ocasión .. es mas versatil una classe (de lo que sea) que entrega el valor de algun evento (en ese caso por ejemplo el de un error) .. así yo puedo "formatear" ese error con la tipografía que yo estime oportuno .. o incluso ignorar ese tipo de mensajes si así lo deseo.

mm Tambien .. por ejemplo esos mensajes de error "prediseñados" prodrias tenerlos en un array .. Con eso sería facil hacer a futuro algun tipo de "extended" para tu clase y por ejemplo tener esos mensajes de error personalizados a gusto del usuario e incluso en varios idiomas ..

Has de pensar que un objeto en general es "merjor" cuando mas modular es.

El if(!$_GET){ .. lo sigues teniendo "incrustado" en tu classe .. Así como está limitas tu classe a PHP versiónes 4.1.x o superiroes (cosa q si hicieras un método para pasar las variables q entren por GET podría usar yo por ejemplo $HTTP_GET_VARS .. o getev() por ejemplo dependiendo de las caracteristivas y version de mi PHP )

GET["id"] ... el nombre de variable "id" es supertipico cuando se está usando edición/borrado de registros .. Como sugerencia te diría q lo cambiases de nombre o mejor todavía dejases la opción (via alguna variable en el constructor o metodo para ello) que el Usuario decida que nombre de variable va a usar para el control del páginado.

echo " <a href=\"$enlace\">$pagina</a> ";
Lo dicho antes .. Crea métodos q devuelvan ese $enlace .. o ese $pagina para yo poder hacer algo tipo:

echo " <a class="miCSS" href=\"$paginado->dame_enlace()\">$paginado->dame_pagina()</a> ";

Como ejemplo de para que crear dos metodos para esa taréa .. Imagina si quiero yo programar usando algun sistema de Templates .. Con tu classe no podría pues hace "echo" .. y a mi (en caso de usar template) me interesa que me devuelva un valor para yo pasarselo a la template con el método q disponga para tal fin.

El hecho de hacer tanto método para hacer cosas q tu a lo mejor piensas en "simplificar" y lamar a 1 metodo en vez de a dos por ejemplo .. te servirá para X proyectos .. pero toma el ejemplo superior .. Y si necesito un link con mi CSS propio asignado así? .. Con tu classe actual tendría q entrar a modificar el código de la misma y la idea de OOP no es esa sino de "modularidad".

Si lo deseas puedes usar "extended" para por ejemplo crear una definicion de estados de ciertos métodos o variables para que sea mas cómodo iniciar tu classe .. Pero NUNCA "cierres" el código.

Tomatelo como consejos para mejorar. Esperamos tu nueva versión xDD.

Un saludo,
  #21 (permalink)  
Antiguo 23/02/2003, 18:01
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
ok, entiendo algo.

Entiendo que la idea de programar OOP es que sea modular asi que intentare mejorarla (por lo menos ahora funciona mejor al menos en lycos).

Eso de $_GET lo uso por que en localhost no me aceptaba $HTTP_GET_VARS; osea me daba error de que no era definida y otra cantidad de errores correspondientes a la linea en donde estaba $HTTP_GET_VARS y la unica forma de que funcionara con $HTTT_XXX_VARS era poniendo un global que como ya dijo josemi no tiene por que estar en una clase (dijo si esto es OOP para que global. o algo asi).

Sobre los echo entonces como , tendria que el usuario hacerlo osea en ves de $p->enlaces(); hacerlo echo $p->enlaces(); y yo solo hacer un return dentro de la clase no?

Sobre lo de los errore si solo hiciese return en ves de echo no los mostraria a menos que el usuario pusiese un echo $p->error();

y bueno no habia pensado en eso de poner los tipos de errores dentro de un array.

Pero bueno poco a poco aprendiendo cosas nuevas.

Seria interesante tener un subforo o mas bien un post donde solo se posteara sobre OOP, bueno propongo eso tener alg donde solo hablar de OOP (para php claro).


Bueno saludos

Y si teneis alguna idea para esta clase no dudes en darla, por ahora la tengo para aprender y para usarla yo (esa es la idea) pero si empezara a trabajar de maravilla por que no colgarla por ahi para que sea utilizada por mas usuarios no?
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #22 (permalink)  
Antiguo 23/02/2003, 19:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Eso de $_GET lo uso por que en localhost no me aceptaba $HTTP_GET_VARS; osea me daba error de que no era definida y otra cantidad de errores correspondientes a la linea en donde estaba $HTTP_GET_VARS y la unica forma de que funcionara con $HTTT_XXX_VARS era poniendo un global que como ya dijo josemi no tiene por que estar en una clase (dijo si esto es OOP para que global. o algo asi).
No es cosa de declararlo global como lo hacias.. sino de crear un simple método q de valor a la variable que vas a usar en vez de $_GET['id'] o lo das como parametro en el "constructor" del objeto para poder hcer algo tipo:

$p=new paginado($conex,$HTTP_GET_VARS['id'])
ó
$p=new paginado($conex,$_GET['id'])

O bien algun método q tengas q usar antes de trabajar con la classe .. algo tipo $p->inicializa($_GET['id'])

todo eso con el fin de dar valor a una variable en la classe tipo:

var $id;
... En tus llamadas q haces tipo:

if($id) o donde lo uses .. usa esa variable en vez de tu if($_GET['id'])

Pero para eso se ha de pasar como parametro a tu classe (objeto) ese valor de iniciación de esa variable ..



Cita:
Sobre los echo entonces como , tendria que el usuario hacerlo osea en ves de $p->enlaces(); hacerlo echo $p->enlaces(); y yo solo hacer un return dentro de la clase no?
Así es ... tus métodos de ese estilo solo devuelvan un return para hacer yo un echo $p->enlaces() .. Pero date cuenta en mi ejemplo q te puse .. Un "enlace" se compone de dos partes: el link del enlace y el texto a mostrar para ese enlace:

echo " <a class="miCSS" href=\"$paginado->dame_enlace()\">$paginado->dame_pagina()</a> ";

Por eso tendrias q desglosar tu método actual en dos al estilo del ejemplo ...

Cita:
Sobre lo de los errore si solo hiciese return en ves de echo no los mostraria a menos que el usuario pusiese un echo $p->error();
El hecho de documentar una classe y sus métodos no es decir lo q hace el método en una frase .. Lo que importa es decir que parametros requiere el método (y sus tipos) y que entrega

Fijate en la sintax de la documentación de las funciones de PHP:

Cita:
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )
Si interpretas la sintax dice bien claro "bool" (q devuelve un booleano . true/false) . y cada uno de sus parametros y el tipo q son "string" o el que corresponda .. tambien se indican los parámetros q son opcionales entre corchetes [..] y si alguno tomase algun valor por defecto se avisaría igualmente ..

Ademas de eso .. no se como se indicaria q tu metodo tal hace un "echo" de ese string q devulve .. Pero de alguna forma hay q indicarlo.

Piensa que una buena documentación ayuda a comprender cualquier error q pueda cometer el usuario de tu classe.

Cita:
Seria interesante tener un subforo o mas bien un post donde solo se posteara sobre OOP, bueno propongo eso tener alg donde solo hablar de OOP (para php claro).
Recientemente se creó el foro "Ingenería del Software y gestión de proyectos" .. Es el foro mas indicado para preguntar cosas sobre OOP .. Los "detallitos" de como es la sintax de una llamada a un metodo .. o como se instancia un objeto en PHP es lo de menos .. Con una buena base de teoria en la mano no tendrias estos problemas de "conceptos" como los vas solventando a base de que poco a poco vas aprendiendo de las sugerencias q se te van dando ...
Cuando llegue PHP 5 ahí hablaremos de crear un sub-foro de OOP para PHP xDD .. mientras tanto si lo estimas oportuno .. inicia un mensaje en el foro con tu propuesta. Yo ya te digo q votaría q "ahora de momento no" ..

Un saludo,
  #23 (permalink)  
Antiguo 23/02/2003, 19:41
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
OK, a ese foro me voy para aprender algunas cosillas mas.


Sobre lo de esa clase la ire arreglando, gracias por las ideas y propuestas dadas.

Cualquier cosa les cuento.

Creo que entonces le dariamos fin a este mensaje o no?

Bueno si no es asi, que sigan dando mensajes para poder mejorar la clase.


Saludos

PD: Gracias cluster se me ilumino la mente con tu post.
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:32.