Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.626
Poder: 27
dec Va camino a la famadec Va camino a la fama
Retornar o no retornar desde un script principal

Hola,

¿Cómo va eso? Espero que bien. Pues aquí, que me ha surgido una duda, a ver si alguien podría ayudarme con ella. Si uno echa un vistazo al manual de PHP sobre "return()", puede que le pase lo que a mí, que no termina de verlo claro del todo, para según qué casos. Si te parece, pondré un ejemplo. Y nota que es un ejemplo "real", que estoy usando ahora mismo en cierto proyecto.

Imagina que existe un "script" "principal" (no requerido ni incluido, sino "solicitado", desde donde se incluyen y requieren otros "scripts"), digo, tal que así:

Código PHP:
<?php

require('gb-init.php');
$gbfe = new FrontEnd();

?>
Efectivamente, son dos líneas nada más. Primero se requieren ciertos archivos, y luego se crea una instancia del objeto "FrontEnd", como puede verse. No hay más. Puesto que nada más es necesario. Ahora bien, si concluimos que no hay más, ¿qué tal parecería este cambio?

Código PHP:
<?php

require('gb-init.php');
 return new 
FrontEnd();

?>
Aparentemente, todo va bien. No noto mejora en el proceso del "script", pero, la "idea" en este segundo caso, es que, ya que no vamos a utilizar la variable "$gbfe", ¿para qué guardar una instancia del objeto en la misma? ¿No sería, sino más rápido, más elegante, más correcto, mejor, retornar directamente la instancia de dicho objeto?

Ahora bien. Téngase en cuenta que la clase "FrontEnd()" se encarga, a partir de su constructor, de hacer lo que es menester hacer. De hecho, como digo, en ambos casos expuestos arriba el programa se comporta como se espera, al menos en las pocas pruebas que he hecho, lo reconozco. Pero, ¿qué implicaciones tienen la primera solución y la segunda? ¿Cómo lo veis vosotros?

Y nada más. Eso es lo que quería preguntaros, puesto que me ha surgido la duda, y pienso que tal vez podáis ayudarme. Así que gracias de antemano pataliebres, ¡y cuidado con las procesiones!
__________________
David Esperalta
www.davidesperalta.com

Última edición por dec fecha: 23-03-2008 a las 08:58:39.
Responder Con Cita
  #2  
Antiguo 24-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.626
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Pues nada. Aparte de dar un empujón a este hilo, quería decir que he optado por la segunda "solución", puesto que me parece la más acertada. No obstante sigue sin quedarme claro...
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 24-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: Oct 2004
Posts: 367
Poder: 14
keyboy Va por buen camino
Cita:
Empezado por dec
¿para qué guardar una instancia del objeto en la misma? ¿No sería, sino más rápido, más elegante, más correcto, mejor, retornar directamente la instancia de dicho objeto?
En mi opinión, cualquiera de las dos opciones es extraña. En la primera asignas el objeto creado a una variable que no se utiliza nunca, y en la segunda regresas el objeto creado, sí, pero ¿a quién? Realmente se va al limbo ¿no? Entonces, ¿por qué no simplemente poner?

Código PHP:
<?php
require('gb-init.php');
new 
FrontEnd();
?>
Porque en el fondo lo que hay es un objeto que nunca se utiliza.

Obviamente es poco lo que se puede decir a partir de un par de líneas sin conocer con más detalle lo que hace tu clase, pero a ojo de cubero (conste que no digo buen cubero) más bien da la impresión de que el constructor de la clase hace demasiadas cosas. Supongo que se encarga de preparar toda la página y mostrarla, pero en tal caso, quizá sería más adecuado separar la preparación de la visualización:

Código PHP:
<?php
require('gb-init.php');
$gbfe = new FrontEnd();
$gbfe->show();
?>
Pero, como digo, hablo en el aire. A fin de cuentas tampoco se trata de agregar un método tan sólo para justificar una variable. Quizá lo que está extraño es la clase en sí, pues podrías tener algo como:

Código PHP:
<?php
require('gb-init.php');
frontEnd();
?>
esto es, si lo único que usas de la clase (al menos externamente) es su constructor, ¿para qué tener una clase? ¿Porqué no convertir ese constructor en una función llana?

En fin, es sólo para que lo consideres.

Bye
Responder Con Cita
  #4  
Antiguo 24-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.626
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Gracias por tu respuesta keyboy. Lo que creo que voy a considerar es hacer de la clase "FrontEnd" una clase estática. De este modo podría hacerse algo como esto, muy cerca de la "función que tú dices", lejos de retornar nada, ni variable, ni objeto ni nada...

Código PHP:
<?php
require('gb-init.php');
FrontEnd::Response();
?>
Algo así creo que puede resultar curioso, y, desde luego, no se me hubiera ocurrido sino respondes keyboy. Efectivamente, un "script" puede retornar un valor, pero, en este caso no se utiliza. Lo de la variable lo descarto, de hecho ya está descartado, lo del "new FrontEnd()" tampoco me convence del todo. Y lo de la función,... bueno, me quedo en este caso con algo muy parecido: un método estático de la clase "FrontEnd()".

Pero sigo abierto a sugerencias. ¡Gracias otra vez keyboy!
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #5  
Antiguo 24-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.626
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Otra vez yo... dos cosas. Primero, que el asunto queda así, de momento:

Código PHP:

<?php

require('gb-init.php');
FrontEnd::DoResponse();

?>
Y la segunda, que, si quieres, keyboy (y quien quiera también) puedes echar un vistazo al proyecto en cuestión, ya digo, si te apetece, únicamente, puedes descargarlo desde aquí:

http://www.gesbit.com/download.php

Nota: Enlazo a la página de descargas, porque, el archivo se compone de la fecha actual, para evitar que el enlace quede "obsoleto", puesto que hago cambios prácticamente todos los días.

Nota 2: Creo que la solución de llamar a un método estático de la clase "FrontEnd", más aún, de hacer esta clase estática, ha sido una estupenda idea, gracias a ti keyboy, ya digo, puesto que, al fin y al cabo, no se precisa ninguna instancia de la clase "FrontEnd", ni en una variable, ni como resultado, ni se referencia a ella de ningún modo. Otra vez gracias.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #6  
Antiguo 24-03-2008
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: Mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 15
lucasarts_18 Va por buen camino
Hola Dec:

Pues bien, pues los métodos estaticos se crearon precisamente para hacer uso de objetos no instanciados, en este caso no instanciar la clase y lanzarse directo a usar el método en cuestión.

Por otra parte ponerlo en una función no me parece lo más adecuado si tratas de mantener todo tu sistema POO.

Me quedo con la opción de que sea una clase con un método estático. Por cierto creo que la clase también debería ser estática.

Vamos, que no soy un experto...., faltaría la opinión de Román

EDITO: No había leído tu último Post DEC... :P

Saludos .-
__________________
No todo es como parece ser...

Última edición por lucasarts_18 fecha: 24-03-2008 a las 23:13:56.
Responder Con Cita
  #7  
Antiguo 24-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.626
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola,

Cita:
Empezado por Lucas
Me quedo con la opción de que sea una clase con un método estático. Por cierto creo que la clase también debería ser estática.
Yo también me quedo con esa opción, solución, o como quiera llamarse. Al menos hasta que se me convenza de otra cosa. Por otro lado, la clase no tiene que ser estática, si no me equivoco, siempre que desde el método estático no se haga referencia a la instancia de la misma, pues no estaría ahí disponible. En el caso del proyecto de que se trata aquí, efectivamente, la clase queda estática, con todos sus miembros estáticos, aunque todos ellos privados, menos uno, precisamente, el que se ve que uso arriba.

Gracias Lucas por tu respuesta.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar script desde el isql victork_py Firebird e Interbase 9 25-05-2017 20:56:54
retornar un valor Proc.Almacenado cacu OOP 1 05-03-2008 22:39:16
Como retornar un valor en Delphi Stanley Varios 8 29-10-2007 04:04:03
Operar con ficheros .pdf desde script php smendo PHP 1 18-05-2005 19:20:29
login desde formulario principal ale21alito Varios 5 21-04-2005 21:02:34


La franja horaria es GMT +2. Ahora son las 19:09:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi