Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP5: "Packages" al estilo Java?

Estas en el tema de PHP5: "Packages" al estilo Java? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Conceptualmente es una forma de agrupar clases, que simplemente se podría representar físicamente como si fuera un directorio en una estructura del proyecto. El tema ...
  #1 (permalink)  
Antiguo 05/10/2005, 12:03
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
PHP5: "Packages" al estilo Java?

Conceptualmente es una forma de agrupar clases, que simplemente se podría representar físicamente como si fuera un directorio en una estructura del proyecto.

El tema de mi pregunta, es si PHP5 lo contempla y de que forma. Estuve viendo una de las presentaciones oficiales en talks.php.net, y en una nombran los "namespaces", pero estuve probando y no funcionan.

Luego, estuve buscando en la documentación de www.php.net, y tampoco encuentro referencias al respecto.

Alguna idea?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #2 (permalink)  
Antiguo 05/10/2005, 16:16
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Hola enrique el tema de los package o los import digamos que no está implementado en php5. Aunque si que tu te puedes crear tu clase que te lo pueda hacer, por ejemplo prado framework utiliza un sistema import para cargar clases no creas que es muy dificil...

Realmente no se necesita, a parte de los include, o require_once, php5 incluye un nuevo sistema para cargar clases nuevo en el Zend Engine 2 es decir el nuevo motor para PHP5, te explico:

hay una función global __autoload() a la que se invoca automáticamente cada vez que se hace referencia a una clase que no está definida en el contexto actual en el que se ejecuta el código. Este mecanismo permite incluir a demanda el código que va necesitándose y que se mantiene en módulos independientes.

Imaginate que tenemos definido en un archivo clientes.php la clase cliente que nos servirá para guardar en un objeto los datos. Y en otro archivo, por ejemplo pedidos.php imagínate que en un momento necesitamos el cliente con la id 12 por ejemplo:

$id = 12;
$cliente = new clientes($id);

si al principio del archivo no hemos puesto un require_once('clientes.php') dará error porqué no encuentra la clase clientes. Para solucionar esto sin tener que recurrir a los require_once imaginate que tenemos que cargar cientos de objetos, entonces podremos utilizar __autoload de manera fácil:

function __autoload($clase){
require_once($clase. '.php');
}


a está función se le pasará como parámetro el nombre de la clase que estamos instanciando y luego la cargará, así de fácil.

Para acabar personalmente yo suelo utilizar para nombre de fichero :
class.nombreclase.php

ya que programo completamente en objetos.

y en mi autoload iria

function __autoload($clase){
require_once('class.'. $clase. '.php');
}

Última edición por Casuis; 06/10/2005 a las 08:23
  #3 (permalink)  
Antiguo 06/10/2005, 05:18
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Gracias por la pronta respuesta, pero veo que no entendiste mi pregunta, o como tu dices, no debes llevar mucho tiempo en Java ))

El tema es así: en java puedes colocar la siguiente sintaxis al inicio de tu clase:

Package nombreDelPackage;

Lo que hace que todas tus clases se encuentre "agrupadas" en un paquete "lógico" (es decir, físicamente crea un subdirectorio con ese nombre y coloca las clases). Posteriormente, el sistema pueda convertirse en archivos ".jar" (es decir, los comprime en un solo archivo).

Yo puedo hacer un sistema de 3 capas usandos 3 paquetes llamados: "interfaz", "dominio", y "persistencia", donde en cada uno de ellos tengo las clases que corresponden.

Para usar una clase del paquete, sería la invocación:

dominio.Empresa.traerListaDeCliente();

Lo que me confunde es que en una presentación de talks.php.net habla de este concepto, pero usando la palabra "namespaces" (creo que es el que usa VisualBasic.Net).

Aquí está la presentación, pero en la práctica no funciona (y no encuentro en el manual referencia al mismo):

http://talks.php.net/show/php5intro/3

Alguna idea?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 06/10/2005, 08:04
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
Enrique. Lamento decepcionarte, pero namespaces no pasaron d la revisión de la versión beta de php5. Asi que veo dos opciones para usar namespaces en php5. Modificar el código C de php5 para soportar namespaces, o esperas a que sea soportado, tal vez para php6.

un saludo,
  #5 (permalink)  
Antiguo 06/10/2005, 08:22
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Corrección

Primero pedir perdón a enriqueplace me confundí package con import jejeje aunque creo q te diste cuenta. Gracias sism82 no tenía ni idea de esos datos. (Siempre se acaba aprendiendo algo).
  #6 (permalink)  
Antiguo 06/10/2005, 08:50
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Me imaginé que eso estaba pasando; que la presentación era de una versión beta y que la versión oficial no lo incluyó.

El tema es que ahora se complica un poco el manejo de conceptos con UML, como son los "paquetes", pero se puede sustituir por hacer subdirectorios que lo representarían. El tema que llamar un clase desde un paquete determinado no se podría (sería representado por un include con el camino a la clase, que incluiría un subdirectorio que sería el paquete).

Gracias, ya me sacaste de la duda!

Cita:
Iniciado por sism82
Enrique. Lamento decepcionarte, pero namespaces no pasaron d la revisión de la versión beta de php5. Asi que veo dos opciones para usar namespaces en php5. Modificar el código C de php5 para soportar namespaces, o esperas a que sea soportado, tal vez para php6.

un saludo,
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 06/10/2005, 08:53
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Si, no hay problema, sé que lo hiciste con la mejor intención

Cita:
Iniciado por Casuis
Primero pedir perdón a enriqueplace me confundí package con import jejeje aunque creo q te diste cuenta. Gracias sism82 no tenía ni idea de esos datos. (Siempre se acaba aprendiendo algo).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 06/10/2005 a las 09:02
  #8 (permalink)  
Antiguo 03/11/2005, 14:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 2
Cita:
Iniciado por enriqueplace
El tema es que ahora se complica un poco el manejo de conceptos con UML, como son los "paquetes", pero se puede sustituir por hacer subdirectorios que lo representarían. El tema que llamar un clase desde un paquete determinado no se podría (sería representado por un include con el camino a la clase, que incluiría un subdirectorio que sería el paquete).
Tal vez esto sea un paréntesis de lo que originalmente se trata en este mensaje pero creo es importante por el uso que se le esta dando al concepto de paquete.

En el libro de “El lenguaje unificado de modelado” los autores comentan que UML no es un lenguaje de programación visual, pero permite mas no requiere un acoplamiento con varios lenguajes de programación OO. Esto quiere decir que UML al ser un lenguaje de modelado grafico permite la transformación de modelos en código, pero esto no es directo el 100% de las veces. Ya que cada lenguaje tiene su propia sintaxis e implementación. Con esto quiero decir que el concepto de paquete en UML no es del todo el mismo que usa java. En el primero el concepto lo usa para organizar elementos de un modelo en grupos con la finalidad de hacer mas fácil la compresión del mismo, poniendo un ejemplo no es lo mismo que entre a una bodega y vea un sinfín de cosas a que entre y este delimitada por áreas, como embarque, anden, etc. Esos conceptos nos permiten entender mejor el lugar pero no existen como tales en la bodega, son solo conceptuales en el mismo sentido se usa el paquete en UML, además el paquete es de uso general para agrupar elementos como clases, interfaces, componentes, casos de uso, paquetes y diagramas. También implementa reglas de visibilidad pero esto es con el motivo de separar elementos en vistas arquitectónicas que es uno de los usos comunes de los paquetes.
Así que un include te sirve como el import de UML, que agrega al espacio de nombres el paquete que esta exportando sus áreas publicas.
Así que mi estimado Enrique no tomes como estándar java como implementación de UML pero si a un así requieres manejar los paquetes de una forma similar, lo puedes hacer como se hace siempre, como es tu caso tienes tres paquetes de tu sistema, cada paquete puede ser un subsistema así que lo mas común en esos casos es usar el patrón Facade (fachada) para acceder al subsistema y controlar el acceso a sus elementos.
Si alguien tiene una mejor percepción de lo que estoy diciendo se acepta la retroalimentación.
__________________
Saludos!
Mty-NL..
  #9 (permalink)  
Antiguo 16/07/2006, 06:50
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Lástima que no estaba suscripto a esta discusión y llega un poco tarde mi respuesta.

El ejemplo de Java, principalmente se origina porque PHP5 usa como base este lenguaje, y tanto Java como .Net contemplan sintaxis que facilitan la traducción UML<->lenguaje.

Me queda muy claro que no tiene por qué se exacto esta "conversión" y que se puede representar con otras estrategias, pero creo que por una cuestión de "evolución mutua", ambas herramientas tienden a hablar "el mismo idioma".

Si intentas hacer la representación de "paquetes" con un lenguaje que no tiene una representación directa en sintaxis para este concepto, tratar de seguir trabajando con este concepto por todo el resto de tu sistema se vuelve muy complejo.

De ahí mi pregunta.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 02/06/2008, 10:45
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Respuesta: PHP5: "Packages" al estilo Java?

esto si que es nuevo para mi, no habia visto el uso de namespaces en php5.
Es digno de investigarlo. Lo que creo es que para agrupar clases en php se debe ocupar alguna encapsulacion de las funciones includes y requires o algo asi, ademas tenemos __autoload(), pero para ser sincero no estoy seguro de como implementarlo.

Espero que haramos un post para profundizar este tema. Enrique, espero que aportes con tu experiencia...

saludos..

Hector Garzo F.
  #11 (permalink)  
Antiguo 02/06/2008, 13:57
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: PHP5: "Packages" al estilo Java?

Estimado Hector:

Al momento no cuento con más experiencia que lo hecho en Java y .Net, tengo leído lo que viene en la 5.3, pero no tengo pruebas hechas... cuando tenga acceso a un PHP 5.3 las haré y comentaré, pero por ahora por un tema de tiempo no pude.

Pero en sí espero que funcione "igual" que en Java o .Net, no sé cómo queda con el funcionamiento de los requiere e includes.

PD: cuando Xampp para Windows o alguna distribución Linux la tenga por defecto en su instalación, o Dreamhost, con gusto le meteré mano
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 04:05.