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

namespaces en 5.3

Estas en el tema de namespaces en 5.3 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estuve leyendo el manual oficial, y aún me parece increible que definiendo los namespace, para usarlos, haya que requerir primero el archivo que los contienen... ...
  #1 (permalink)  
Antiguo 25/03/2012, 22:45
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
namespaces en 5.3

Estuve leyendo el manual oficial, y aún me parece increible que definiendo los namespace, para usarlos, haya que requerir primero el archivo que los contienen... no tiene ya toda la información para hacer un autoload? que sentido tiene seguir dependiendo de los require_once? entonces, la única forma que sea práctico usarlos es meter varias clases en un mismo archivo? y esto no va contra toda costumbre? no es demasiado, ademas de hacer un use, antes, hay que hacer un require?

Si alguien me puede compartir su experiencia en esta area, me vendria muy bien.

gracias
  #2 (permalink)  
Antiguo 26/03/2012, 09:45
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: namespaces en 5.3

usar Namespaces no quiere decir que el autoload sea implícito, los autoload siempre se registran y continúan registrándose de forma explícita.

spl_autoload_register

el objetivo de un Namespace no es, ni nunca ha sido el de ofrecer autoload, el objetivo lo indica su nombre "espacio de Nombres" cuyo propósito es empaquetar diferentes funcionalidades o librerías las cuales puedan tener clases con nombres redundantes, y dicho concepto aplica para cualquier lenguaje POO.

Por ejemplo puedo tener 2 librerias las cuales tengan una clase en común como "Response", antes se tenía que añadir un prefijo para poder usar ambas clases en tiempo de ejecución (PdfResponse, HttpResponse por ejemplo) de otro modo ocurría un error de redeclaración de clases, en cambio si empaqueto mis librerias con un namespace específico puedo instanciar ambas clases en tiempo de ejecución:

$responsePDF = new PDFNamespace\Response();
$responseHTTP = new HttpNamespace\Response();

ése es el objetivo de los espacios de nombres.

el objetivo del keyword Use es definir un shortcut para un namespace definido, además de poder asignar un alias., el use no es necesario, por lo cual lo siguiente es válido:

$miclase = new \ruta\hacia\el\namespaces\Clase();

con ello No necesito Use, aunque para mejorar la apariencia del código se recomienda su uso.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 26/03/2012, 09:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Para nada, por eso existen los autoload, para evitar estar haciendo el require_once de cada archivo, con un autoloader, y una estructura bien definida de carpetas y archivos, puedes evitar el uso por completo de require_once (ve la función spl_autoload).

Saludos.
  #4 (permalink)  
Antiguo 26/03/2012, 10:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Gracias por los comentarios Maycol,

El mismo comentario que hacía lo puede hacer cualquiera que haya trabajando en distintas plataformas, como Java, no es nada raro ni descabellado esperar que la carga se haga automática... es como que en PHP seguimos haciendo las cosas de forma incompleta, un paso atrás de las demás tecnologías.

Si hay que hacer un sp_autoload_register, perfectamente podría ser automático, no pasarle el problema al desarrollador.

No sé si se entiende el punto.

Nuevamente gracias por tu aporte.
  #5 (permalink)  
Antiguo 26/03/2012, 10:06
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: namespaces en 5.3

Cita:
Iniciado por bastianbox Ver Mensaje
Gracias por los comentarios Maycol,

El mismo comentario que hacía lo puede hacer cualquiera que haya trabajando en distintas plataformas, como Java, no es nada raro ni descabellado esperar que la carga se haga automática... es como que en PHP seguimos haciendo las cosas de forma incompleta, un paso atrás de las demás tecnologías.

Si hay que hacer un sp_autoload_register, perfectamente podría ser automático, no pasarle el problema al desarrollador.

No sé si se entiende el punto.

Nuevamente gracias por tu aporte.
al contrario, otra vez olvidamos como funciona PHP:

en Java se pre-compila todo en bytecodes por lo cual no hace falta includes o requieres.

en PHP no existe tal proceso, y el propósito en definir un autoload es poder cargar lo que se necesita, cuando se necesita, cuando PHP incluyó los Namespaces, el Autoload ya había sido implementado hace tiempo, por lo cual lo uno nada tiene que ver con lo otro. Recuerda que PHP es un lenguaje multiparadigma lo que quiere decir que le da la libertad al desarrollador de implementar POO si así lo desea, con la estructura que quiera y definir el estándar que le guste, así el mismo no siga el camino de las buenas practicas, además los FW sobre PHP definen sus propios mecanismos de autoload, y el de Symfony2 por ejemplo es claro ejemplo del uso de Namespaces, en cambio el de Codeigniter2 es completamente diferente, pero ambos Funcionales
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #6 (permalink)  
Antiguo 26/03/2012, 10:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Me queda muy claro Maycol, pero a lo que voy, si tenemos que hacer siempre 3 o 4 líneas de autoload, que por lo general tienen un comportamiento semi estándar (que bien se podría modificar), no te parece que es una funcionalidad que podría proveer el lenguaje? digo, si hay que poner siempre 3 o 4 líneas, y la resolución parece evidente.

PD: por más que no sea compilado, perfectamente lo puede hacer, porque lo hace, solo que depende que agregemos siempre esas 3 lineas
  #7 (permalink)  
Antiguo 26/03/2012, 10:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Creo que no leíste mi mensaje bastianbox, PHP ya te ofrece de una implementación estándar: spl_autoload.

Saludos.
  #8 (permalink)  
Antiguo 26/03/2012, 10:33
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Gracias GatorV!

Leí la documentación y no vi ningún ejemplo... cual sería la mínima expresión a usar para que funcione con los namespaces? no hay que hacer un str_replace de las \\ y armar los directorios para requerirlos luego? no me di cuenta cuan por defecto es y si sirve para algo en este caso.

gracias
  #9 (permalink)  
Antiguo 26/03/2012, 10:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Es lo más simple:
Código PHP:
Ver original
  1. <?php
  2.  
  3. new Foo\Bar\Baz;
  4. // incluye desde el include_path: foo/bar/baz.php

Todo depende de que pongas tu include_path de forma correcta y con eso basta, sí quieres más control (ej hacer el str_replace, etc.) debes de usar entonces una implementación propia.

Saludos.
  #10 (permalink)  
Antiguo 27/03/2012, 13:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Gracias GatorV, no sabía que se podía hacer de esta forma... lo que me llama la atención es que entonces se puede llamar a una clase específica, y siempre respetando una ruta física correspondiente (tienen que coincidir los subdirectorios con el nombre del namespace).

Tampoco veo que de esta forma se pueda hacer un use de un namespace entero, hay que hacerlo clase por clase, no?

gracias
  #11 (permalink)  
Antiguo 27/03/2012, 13:38
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: namespaces en 5.3

Si te refieres a wildcards, no hay, pero puedes importar el namespace directamente y utilizar el último segmento del mismo mas el nombre de la clase para instanciar, algo así:

Código PHP:
Ver original
  1. use Application\CoreBundle\Entity;
  2.  
  3. new Entity\Post();
  4. new Entity\Comment();

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 27/03/2012, 14:26
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Gracias Masterpuppet,

Viendo documentación y presentaciones de la gente de Zend (3/2011), hablan de importar paquetes haciendo

use My; // imports namespace
use My\Registry; // imports class


Por eso me llama la atención (lo mas comico que no hablan nunca del autoload).
  #13 (permalink)  
Antiguo 27/03/2012, 15:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Lo que pasa es que los namespaces se crearon después de que se incluyo el autoload en PHP, se da por entendido que el usuario ya conoce al menos estas partes de PHP antes de empezar con temas nuevos.
  #14 (permalink)  
Antiguo 28/03/2012, 05:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Sí, no me parece obvio, ya que para algo se hacen estas presentaciones, para extender nuevas prácticas, y si la información no es completa, da para confusiones.

De todas formas, tampoco me cierra que el ejemplo de use y el namespace que carga todas las clases... veo muchos espacios en blanco que no cierran... quieres decir entonces que todo esto tenemos que inventarlo nosotros, a como salga? al final, la implementacion es muy incompleta, ya que el desarrollador tienen que implementar TODO lo que falta... hacer un namespace que luego no carga las clases, y que el codigo de carga lo tenemos que adivinar, es lamentable.
  #15 (permalink)  
Antiguo 28/03/2012, 05:56
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: namespaces en 5.3

No es tan así bastianbox, el problema es estar desinformado, te sugiero que busques info sobre PSR-0, te dejo un par de links

https://github.com/php-fig/fig-stand...epted/PSR-0.md
http://phpmaster.com/autoloading-and...sr-0-standard/

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #16 (permalink)  
Antiguo 28/03/2012, 07:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: namespaces en 5.3

concuerdo con @masterpuppet, yo no conocía del nombre formal de dicho estándar, al final si decides trabajar desde 0 es obvio que se te dificulten ciertas tareas de implementación, por lo cual los profesionales usamos algún framework (FW), los cuales vienen con dichas implementaciones, lo mismo ocurre en otros lenguajes, el problema es que se suele comparar a PHP contra famosos FW como struts, RoR, dJango entre otros, cuando PHP es sólo un lenguaje y hacer todos aquellos estándares en python, ruby o java desde 0 también cuesta, si decides usar un FW PHP tales como Symfony2, Zend, Cake, Yii, Codeigniter, entre otros verás que la aplicación de dichos estándares te permitirá trabajar de forma más fluida.

Actualmente los que trabajan con Namespaces son Symfony2 y creo que Zend2
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #17 (permalink)  
Antiguo 28/03/2012, 10:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Lo que pasa es que tienes una idea errónea, ya que comparas PHP con Java. El que Java te permita hacer un import com.algo.*; te hace pensar que Java carga todas las clases de ese package, pero no es así, de hecho el compilador lo que hace es ver esa línea, analiza todas las clases que realmente usa tu clase de ese package y reemplaza ese import por un import de cada clase ej:
Código Java:
Ver original
  1. import com.package.*;
  2. // se transforma a
  3. import com.package.clase1;
  4. import com.package.clase2;
  5. import com.package.clase3;
  6. import com.package.clase4;

Ya que el cargar todas las clases si no van a ser usadas hace que el rendimiento sea pobre ya que estas cargando clases que no necesitas, por eso en PHP se optó por usar esa nomenclatura (la de cargar el Namespace y luego usar las clases del Namespace).
  #18 (permalink)  
Antiguo 28/03/2012, 16:04
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

GatorV, como comentaba, lo saque de presentaciones de Zend oficiales de marzo 2011 (screencasts), y todo está ahí, en las presentaciones, cómo importar un namespace completo, y muchas de las cosas que aparecen, no funcionan, y tampoco he visto que hablen ni hagan enfasis en el autoload.

Copio

Using PHP 5.3 Namespaces for Fame and Fortune

PHP 5.3 introduced the concept of namespaces into the PHP language. Despite the (continuous) bikeshedding over the namespace separator, the feature is getting rapid adoption.

In this webinar, Matthew Weier O'Phinney will look at the basics of using namespaces, some strategies for organizing your code to use namespaces effectively, and some tips and tricks for using namespaced and non-namespaced code together.

Presenters – Matthew Weier O'Phinney March 2 2011

http://static.zend.com/topics/2011-03-02-Namespaces-v2.pdf

No se que opinan.
  #19 (permalink)  
Antiguo 28/03/2012, 16:13
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Mayco: nadie esta confundiendo a PHP, claramente es un lenguaje, pero, si siempre hay que hacer la implementacion del autoload o la invocación misma, perfectamente podriar ser un estandar en la forma de funcionamiento, y no hay ningun impedimento, si igual se hace a mano, teniendo que agregar una linea de autoload siempre (la cual no le veo sentido tener que hacerlo siempre, es poco practico).

Simplemente estoy describiendo los hechos, contrastables ademas.

Saludos
  #20 (permalink)  
Antiguo 28/03/2012, 16:16
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Master, a veces es facil prejuzgar, no estoy desinformado, simplemente saco distintas conclusiones con la misma informacion. No me parece que Zend haga una presentacion informativa, general, para ayudar a su adopcion, y no nombren siquiera el tema de autoload, se presta a confusion para los no iniciados (que aparentemente era la idea del material de la presentacion que cité).

Y la información es reciente, de marzo 2011.
  #21 (permalink)  
Antiguo 28/03/2012, 17:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Creo te confundes por el hecho de que dice "import" realmente es agregar el alías para poder cargar más fácil el código (es como usar el as sin el as).

Creo te estas envolviendo en muchas cosas que no tienen que ver, primero te quejas de que tienes que cargar un autoloader, ya te demostré que no, PHP tiene una implementación nativa (spl_autoload).

El autoloader es un feature que se agregó en PHP 5, luego se creó el spl_autoloader (como parte de la biblioteca SPL (ve esto como un micro micro FW de PHP para PHP)).

El PDF que indicas, efectivamente solo habla de Namespaces (no toca temas de autoloading ni más (se da por entendido que quien lo lea tenga entendimiento del lenguaje) ¿porque? Porque es un topic de Namespaces, sí eres nuevo en PHP, vas a tener que usar ese y más documentos para conocer como trabaja PHP, y en el Manual esta muy bien explicado: http://www.php.net/manual/en/language.oop5.php

Sí te fijas en los tópicos, esta Autoloading antes de los Namespaces, y sí a lo mejor no hay un ejemplo claro de usar spl_autoload, directamente en la sección de autoloading, pero eso solamente es un punto a mejorar, no significa que PHP no sirva, simplemente falta en la documentación (aparte de que en Autoloading esta el link al spl_autoloader con toda la información).

El tema que indicas de Marzo 2011 es justo cuando se incluyeron los Namespaces (PHP 5.3) el SPL y Autload existían desde antes (PHP5.1) es por eso que si no conocias del tema de autoload, es por desconocimiento de tu parte, no desconocimiento de la gente de Zend, la idea de ese PDF es solamente traer y exponer las ventajas de los Namespaces que se integraron a PHP.

Toda la información que te hemos dado aquí y en el PDF que indicas es correcta, puedes traer un Namespace completo (usando Use) y así referenciar directamente por el nombre (My\Class) o con el alias.

Creo en este caso es fácil prejuzgar ya que tú mismo lo dices, sí estuvieras informado podrías saber que a) El Autoloading es un tema bastante viejo y b) los Namespaces es algo que se integró al lenguaje recientemente por lo que es mejor que antes de continuar, veas un poco de las funciones que PHP te da en el núcleo, y le des una revisada al SPL, ya que muchos Frameworks usan muchas características de SPL que son nativas de PHP.

Saludos.
  #22 (permalink)  
Antiguo 28/03/2012, 19:39
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

GatorV, me da la impresión que se ofenden rapidamente con las preguntas. Leo los manuales, puedo equivocarme, si no lo se, pregunto, leo y aprendo, pero no trato de hablar de temas que no se, para este caso pregunto, nadie va a ser menos por no saber.

Sobre el import de namespaces, está claro en la presentación de Zend, cito:

"import namespace or class, but refer to it using this name"

Importing multiple namespaces/classes
  • namespace Their;
  • use My;
  • user Your;

"Imports are hints to the interpreter, and don't cost anything"

Viste la presentación? PHP 5.3 es de junio 2009, y ya incluía namespace, para marzo 2011 PHP 5.3 ya estaba muy estable y no se hicieron cambios ni actualizaciones radicales.

También, spl_autoload_register es de 5.1.2 en adelante.

Nadie está diciendo que PHP no sirva, de ahí que uno no pueda estar de acuerdo con los pasos que se han seguido o los resultados, no es para censurar.

Algo esta mal, la documentación, las presentaciones, PHP, o los argumentos que estamos esgrimiendo. Particularmente que no se hable nada de autoload en el namespace es un error, tampoco coincide esta presentación con lo que se puede hacer en realidad, ej, importar un namespace completo (no tiene nada de gracia que la solución esté en cómo haces el autoload, y luego no lo comenten en una presentación como hacer).

La verdad que muchos agujeros, creo que cualquier persona normal desconfiaría que algo falta, o un problema hay, y trataría de buscar la solución.

Trabajemos en conjunto, ninguno sabe todo ni tiene la verdad absoluta, si no sabemos, investigamos juntos, no es un pecado no saber o equivocarse.
  #23 (permalink)  
Antiguo 28/03/2012, 21:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Entonces no entiendo ¿que problema tienes?

¿El Autoloader? Ya te indiqué cual puedes usar, sí quieres algo más específico, debes de usar un propio.

¿Importar Namespaces? Debes de usar use y el nombre completo del Namespace y opcionalmente el as para hacer un alias, puedes usar múltiples use, o separados, te dejo un ejemplo de Zend2:

Código PHP:
Ver original
  1. namespace Zend\Mvc\Controller;
  2.  
  3. use Zend\Di\Locator,
  4.     Zend\EventManager\EventCollection,
  5.     Zend\EventManager\EventDescription as Event,
  6.     Zend\EventManager\EventManager,
  7.     Zend\Http\PhpEnvironment\Response as HttpResponse,
  8.     Zend\Loader\Broker,
  9.     Zend\Loader\Pluggable,
  10.     Zend\Mvc\Exception,
  11.     Zend\Mvc\InjectApplicationEvent,
  12.     Zend\Mvc\LocatorAware,
  13.     Zend\Mvc\MvcEvent,
  14.     Zend\Stdlib\Dispatchable,
  15.     Zend\Stdlib\RequestDescription as Request,
  16.     Zend\Stdlib\ResponseDescription as Response,
  17.     Zend\View\Model\ViewModel;
  18.  
  19. /**
  20.  * Basic action controller
  21.  */
  22. abstract class ActionController implements Dispatchable, InjectApplicationEvent, LocatorAware, Pluggable

Puedes ver que hay múltiples use para importar diferentes partes, sí lo que quieres es hacer un símil a Java de un import algo.*; PHP no lo soporta tan directo, ya @masterpuppet te indico como puedes simular algo similar, y de hecho no es buena práctica por lo que más arriba te dije es mucho mejor sí tu clase tiene bien definidas las clases que va a usar.

Lo que regresa a mi punto inicial ¿Cual es el problema actual? La documentación siempre debes de ir al Manual es lo que más se trata de estar actual, dudo que el PDF que indicas se haya actualizado después de la fecha que fue creado, y siempre es mejor ir directo a la fuente.

Saludos.
  #24 (permalink)  
Antiguo 29/03/2012, 07:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años
Puntos: 1
Respuesta: namespaces en 5.3

Que tal Gator, .... eso es Zend, y Zend hace su propio autoload, la presentación habla de namespaces nativos en PHP5.3, nada de Zend, ni autoload toqueteado, y que eso, nativamente, funciona para importar namespaces, por lo que en la realidad, no es cierto.

Ese es el punto que estamos hablando desde el inicio, nadie habló de la imposibilidad de Zend, estamos hablando de las posibilidades o no verdaderas de los namespaces en PHP nativo.

El problema actual por lo que veo es que o no les gustan las preguntas, o debatir abiertamente los temas, más allá de buscar tener razón o no, que nunca fue mi objetivo, sino, discutir abiertamente los temas.

No me cierra nuevamente lo que comentas de la presentación, para esa fecha hacía años que los namespaces estaban estables.

Voy a ver si puedo enviarle un mail al autor para sacar conclusiones de forma directa y no hacer suposiciones sin fundamento.

Cualquier cosa les comento.

saludos

PD: si esto sigue así, los avances de PHP serán para unos pocos y no para el resto de los mortales.
  #25 (permalink)  
Antiguo 29/03/2012, 09:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: namespaces en 5.3

Zend 2 (como Symfony 2) (y como ya te dijieron desde hace mucho, estan apegados al estándar PSR-0, muy sencillamente podrías cargar todas las clases de Zend2 usando el spl_autoload, ya que tienen una relación 1:1 con sus paths.

La razón que Zend 2 usa un autoloader propio es una básica: compatibilidad con otras librerías (inclusive Zend1), si ves los links que te dejo @masterpuppet puedes ver como esta diseñado el estándar e inclusive una implementación para un autoloader genérico.

Ahora no entiendo que es lo que quieres discutir, para eso es el foro para discutir, pero sigo sin entender el punto que quieres demostrar, entiendo que para ti hay algo malo en PHP o en la implementación de los Namespaces o en el Autload, solo que todavía no encuentro que es lo que esta mal o que es lo que ves malo.

Saludos.
  #26 (permalink)  
Antiguo 29/03/2012, 13:13
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: namespaces en 5.3

Exacto, porque el autoload propio más básico que se puede implementar es:

Código PHP:
Ver original
  1. //autoloader.php
  2. spl_autoload_register(function ($clase) {
  3.     $file = str_replace('\\',  DIRECTORY_SEPARATOR, $clase);
  4.     require_once ($file.'.php');
  5. });

y simplemente incluyes ese archivo (require_once('autoloader.php');), con ello y teniendo las clases distribuidas en directorios según el namespace (como en el estándar PSR-0) puedes instanciar cualquier clase que esté dentro del directorio donde ejecutes el script, aunque claro que de ésta forma no cubres por completo el estándar PSR-0, pero te brinda la posibilidad de definir tu propio esquema de autoload, incluso hacerlo completamente independiente del namespace, por lo que namespace != autoload
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
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 01:10.