Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Los namespace y use ¿Como funcionan?

Estas en el tema de Los namespace y use ¿Como funcionan? en el foro de PHP en Foros del Web. Hola: Estoy teniendo muchos problemas con los malditos namespace y los use. Tengo la siguiente estructura en una carpeta llamada Restler: /restler que contiene: v1/ ...
  #1 (permalink)  
Antiguo 07/08/2013, 15:04
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Los namespace y use ¿Como funcionan?

Hola:
Estoy teniendo muchos problemas con los malditos namespace y los use.
Tengo la siguiente estructura en una carpeta llamada Restler:
/restler que contiene:
v1/
vendor/
index.php

/v1 contiene:
Say.php
Eventos.php

/vendor contiene mas archivos irrelevantes (creo)

Y FUERA de la carpeta Restler existe este archivo IMPORTANTE: scriptbueno.php


El contenido de index.php:

Código PHP:
require_once 'vendor/restler.php';
use 
LuracastRestlerDefaults;
use 
LuracastRestlerRestler;

Defaults::$useUrlBasedVersioning true;

$r = new Restler();
$r->setAPIVersion(2);
$r->addAPIClass('Say');
$r->addAPIClass('eventos');
$r->handle(); 
El contenido de SAY.php:

Código PHP:
namespace v1;
require_once 
'../scriptbueno.php'// Si pongo ../../scriptbueno.php Que digo yo es como se accedería de toda la vida, pues me dice que no lo encuentra :-S, no lo entiendo
use LuracastRestlerRestException;


class 
Say {
    function 
hello($to='world') {
    
        
$user JFactory::getUser();
        echo 
"Usuario " $user->username " con id: " $user->id " conectado a Joomla"
        return 
"Hello $to!";
    }
    function 
hi($to) {
        if (!
is_numeric($to))
                                     throw new 
RestException(400'not a valid number');
            
        return  
"Hi $to!";
    }

Scriptbueno.php contiene:

Código PHP:
define'_JEXEC');
define('JPATH_BASE''\joomla2_5' );
define'DS'DIRECTORY_SEPARATOR );
define'JDEBUG''none');

require( 
JPATH_BASE .DS.'includes'.DS.'defines.php' );
require( 
JPATH_LIBRARIES        .DS.'import.php');
require( 
JPATH_BASE       .DS.'configuration.php' ); 
require( 
JPATH_BASE .DS'libraries' DS'joomla' .DS'application' .DS'component' .DS'helper.php');

$mainframe JFactory::getApplication('site');         
echo 
"todo ok"
Y este es el error que me aparece:
PHP Fatal error: Class 'v1\JFactory' not found in C:\xampp\htdocs\Restler31\v1\Say.php on line 12

Yo ya no se que estoy haciendo mal
  #2 (permalink)  
Antiguo 07/08/2013, 15:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Los namespace y use ¿Como funcionan?

Te sugiero consultar una referencia oficial acerca de los estándares PSR-N.

http://www.phptherightway.com/#code_style_guide
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/08/2013, 15:32
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Los namespace y use ¿Como funcionan?

Cita:
Iniciado por pateketrueke Ver Mensaje
Te sugiero consultar una referencia oficial acerca de los estándares PSR-N.

http://www.phptherightway.com/#code_style_guide
Gracias, pero no me ayuda de mucho, no se que es estándar PSR-N, ni en que me puede ayudar en la duda que tengo.
Es un poco urgente, llevo pegándome 3 días con esto, y empiezo a pensar que no se puede hacer lo que quiero.
  #4 (permalink)  
Antiguo 07/08/2013, 15:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Los namespace y use ¿Como funcionan?

Vale, tan vago eres que ni siquiera leíste lo que ahí se dice.

El estándar PSR-0 explica como se debe programar usando namespaces, y por si fuera poco también pudiste buscar en el manual de PHP al respecto.

http://php.net/manual/es/language.namespaces.php

Cita:
Es un poco urgente, llevo pegándome 3 días con esto, y empiezo a pensar que no se puede hacer lo que quiero.
Es increíble que lleves 3 días con el mismo problema sin siquiera leer una manual, el colmo de estos "programadores de la nueva era".

Y de paso te digo que está mal que pienses de esa manera, pero no dudo que lo sigas haciendo si jamás piensas documentarte.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/08/2013, 15:50
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Los namespace y use ¿Como funcionan?

Cita:
Iniciado por pateketrueke Ver Mensaje
Vale, tan vago eres que ni siquiera leíste lo que ahí se dice.

El estándar PSR-0 explica como se debe programar usando namespaces, y por si fuera poco también pudiste buscar en el manual de PHP al respecto.

http://php.net/manual/es/language.namespaces.php



Es increíble que lleves 3 días con el mismo problema sin siquiera leer una manual, el colmo de estos "programadores de la nueva era".

Y de paso te digo que está mal que pienses de esa manera, pero no dudo que lo sigas haciendo si jamás piensas documentarte.
Joder como estas, has tenido un mal dia?
Yo no he dicho que no me haya documentado, te he dicho que eso no me ha servido, por que ya he mirado como 10-15 manuales de ese tipo, además de que en ingles desgraciadamente me entero menos todavía.

Ya esta eh? no hace falta que sigas ayudando.

PD: Ah, y el código no es mio, es de un Framwork, yo quiero hacer uso del scriptbueno.php, y de ahí el problema.
  #6 (permalink)  
Antiguo 07/08/2013, 15:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Los namespace y use ¿Como funcionan?

A ver, te explico a ver si captas algo.

Cuando ya estás usando un namesapce, es decir, esto:
Código PHP:
Ver original
  1. namespace v1;

No puedes acceder a clases o funciones fuera o de otro namespace sin se explícito.

Es decir, esto:
Código PHP:
Ver original
  1. namespace v1;
  2.  
  3. // MAL
  4. $user = JFactory::getUser();

Está mal porque JFactory no existe debaje del namespace v1.

Ahora, lo siguiente:
Código PHP:
Ver original
  1. namespace v1;
  2.  
  3. // BIEN
  4. $user = \JFactory::getUser();

Al colocar la barra invertida, que es el caracter especial para denotar namespaces provocas que deje de buscar en el namespace actual y comience a buscar desde el namespace global.

También para eso sirve use, que simplemente acerca al contexto actual definiciones de otros namespaces, tal cual lo haces.

¿Se entiende?

Te adelanto que todo eso se explica muy bien en el manual de PHP, no hace falta leer 10 o 15 manuales para entender algo tan básico.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/08/2013, 16:01
 
Fecha de Ingreso: julio-2010
Mensajes: 134
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Los namespace y use ¿Como funcionan?

Cita:
Iniciado por pateketrueke Ver Mensaje
A ver, te explico a ver si captas algo.

Cuando ya estás usando un namesapce, es decir, esto:
Código PHP:
Ver original
  1. namespace v1;

No puedes acceder a clases o funciones fuera o de otro namespace sin se explícito.

Es decir, esto:
Código PHP:
Ver original
  1. namespace v1;
  2.  
  3. // MAL
  4. $user = JFactory::getUser();

Está mal porque JFactory no existe debaje del namespace v1.

Ahora, lo siguiente:
Código PHP:
Ver original
  1. namespace v1;
  2.  
  3. // BIEN
  4. $user = \JFactory::getUser();

Al colocar la barra invertida, que es el caracter especial para denotar namespaces provocas que deje de buscar en el namespace actual y comience a buscar desde el namespace global.

También para eso sirve use, que simplemente acerca al contexto actual definiciones de otros namespaces, tal cual lo haces.

¿Se entiende?

Te adelanto que todo eso se explica muy bien en el manual de PHP, no hace falta leer 10 o 15 manuales para entender algo tan básico.
En fin, madre mia....
Me siento algo inútil, te puedo asegurar que he visto varios manuales:
http://php.net/manual/es/language.namespaces.php
http://php.net/manual/es/language.na...sconstants.php
http://php.net/manual/es/language.namespaces.basics.php
http://www.berriart.com/2011/02/15/c...es-en-php-5-3/

Y mas que puedo poner, y.... o he estado muy ciego, o es ALGO tan básico que yo no lo sabia (llevo relativamente poco aprendido php) y en esos manuales no viene....

Asi que enfin... muchísimas gracias de verdad.
La verdad es que me cuesta creer que este funcionando, pero vaya, voy a hacer mas pruebas para asegurarme, pero en principio.... ha funcionado a la primera todo.joooder... madre mia.

Enfin...que Gracias

Última edición por daicon; 07/08/2013 a las 16:14
  #8 (permalink)  
Antiguo 07/08/2013, 18:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Los namespace y use ¿Como funcionan?

Pues donde dice claramente: "Lo básico", dice claramente:

Cita:
Observe que para acceder a cualquier clase, función o constante globales, se puede usar un nombre completamente cualificado, como \strlen() o \Exception o \INI_ALL.

Ejemplo #1 Acceder a clases, funciones y constantes globales desde un espacio de nombres
Código PHP:
Ver original
  1. <?php
  2. namespace Foo;
  3.  
  4. function strlen() {}
  5. const INI_ALL = 3;
  6. class Exception {}
  7.  
  8. $a = \strlen('hola'); // llama a la función global strlen
  9. $b = \INI_ALL; // accede a la constante global INI_ALL
  10. $c = new \Exception('error'); // instancia a la clase global Exception

Etiquetas: namespace
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 09:17.