Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Uso de namespaces con PSR-4

Estas en el tema de Uso de namespaces con PSR-4 en el foro de PHP en Foros del Web. Hola Estoy dando vueltas ha mi las librerias de mi proyecto ya que queria hacer un refactoring para pasar mis utilidades al estandar PSR-4 y ...
  #1 (permalink)  
Antiguo 28/07/2015, 03:09
 
Fecha de Ingreso: julio-2015
Ubicación: Tiznit (Marruecos)
Mensajes: 14
Antigüedad: 9 años, 4 meses
Puntos: 0
Sonrisa Uso de namespaces con PSR-4

Hola

Estoy dando vueltas ha mi las librerias de mi proyecto ya que queria hacer un refactoring para pasar mis utilidades al estandar PSR-4 y usarlo con composer, y de esta forma poder usarlo en otros proyectos.

Estructura:
Código:
|proyecto
   |vendor
      |minombre
         |paquete   
            |src
                MiClase.php
composer.json del proyecto
Código:
...
 "autoload": {
    "psr-4": {
      "Minombre\\Paquete\\": "src"
    }
...
composer.json de mi paquete
Código:
...
"require": {
    "php": ">=5.3.9"
  },
  "autoload": {
    "psr-4": {
      "Minombre\\Paquete\\": "minombre/paquete_dir/"
    }
...
fcihero de clase:
Código:
<?php

namespace Minombre\Paquete\MiFoo;

class MiFoo {

    protected $variable;

    public function __construct($variable)
    {
        $this->variable = $variable;
    }

    public function getVariable()
    {
        return $this->variable;
    }
Fichero de pruebas. Ya en Phpstomr me ocurre algo curioso. Cuando escribo el conoce en el autocompletado la clase, pero al dar intro la muestra como problema.

test.php
Código:
<?php

use Minombre\Paquete\MiFoo;


// MiFoo::myText(); //tampoco funciona pues muestra error de clase no localizada
$variable = "Hola Mundo";

$request = new MiFoo($variable);
var_dump($request->getVarable());


Ya no se por donde seguir... me encuentro estupido.

Composer si me reconoce mi paquete de echo añadio la estructura en
Código:
|app
   |vendor
       |composer
           autoload_psr4.php
Código:
return array(
    ...,
    'Minombre\\Paquete\\' => array($baseDir . '/minombre/paquete_dir/src'),
);
Un saludo.

Última edición por abkrim; 28/07/2015 a las 03:10 Razón: Visualziación
  #2 (permalink)  
Antiguo 28/07/2015, 04:30
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Uso de namespaces con PSR-4

Buenas,

Has probado con:
Código:
<?php

use Minombre\Paquete\MiFoo\MiFoo; 


// MiFoo::myText(); //tampoco funciona pues muestra error de clase no localizada
$variable = "Hola Mundo";

$request = new MiFoo($variable);
//var_dump($request->getVarable());
/* mejor así */ var_dump($request->getVariable());
El namespace asignado es:
Código:
namespace Minombre\Paquete\MiFoo;

class MiFoo {
//...
}
Para acceder a la clase, sería el namespace + el nombre de la clase

Código:
use Minombre\Paquete\MiFoo\MiFoo;
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Última edición por Uncontroled_Duck; 28/07/2015 a las 06:02
  #3 (permalink)  
Antiguo 28/07/2015, 05:53
 
Fecha de Ingreso: julio-2015
Ubicación: Tiznit (Marruecos)
Mensajes: 14
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de namespaces con PSR-4

Hola

Por probar, pruebo por que me lo dices, pero vamos php en su manual es claro... las barras son "\" (y no funciona)

[URL="http://php.net/manual/es/language.namespaces.nested.php"]Declarar subespacios de nombres[/URL]

En cuanto a la edicion /* mejor asi*/ gracias.. se me colo la "i" al hacer el post por dos veces, ya que desde Firefox, el cloudfare no me deja postear, por no se que de la seguridad....

Última edición por abkrim; 28/07/2015 a las 05:57 Razón: Url mal
  #4 (permalink)  
Antiguo 28/07/2015, 06:01
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Uso de namespaces con PSR-4

Cita:
Iniciado por abkrim Ver Mensaje
Hola

Por probar, pruebo por que me lo dices, pero vamos php en su manual es claro... las barras son "\" (y no funciona)

[URL="http://php.net/manual/es/language.namespaces.nested.php"]Declarar subespacios de nombres[/URL]

En cuanto a la edicion /* mejor asi*/ gracias.. se me colo la "i" al hacer el post por dos veces, ya que desde Firefox, el cloudfare no me deja postear, por no se que de la seguridad....
Discúlpame, no se entendió lo que quise mostrar...

El Highlight de PHP no permite poner las barras así: \

Por eso puse lo de las barras invertidas, un poco escueto por mi parte.

En las otras indicaciones si las pongo tal cual son, ahora lo cambio para no generar más confusiones.

Es lo que comenté en las indicaciones posteriores a eso.

Cita:
Para acceder a la clase, sería el namespace + el nombre de la clase
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Última edición por Uncontroled_Duck; 28/07/2015 a las 06:33
  #5 (permalink)  
Antiguo 28/07/2015, 07:02
 
Fecha de Ingreso: julio-2015
Ubicación: Tiznit (Marruecos)
Mensajes: 14
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de namespaces con PSR-4

Aggg....

No vi el codigo...
Código PHP:
Ver original
  1. use Minombre\Paquete\MiFoo\MiFoo;

Es decir habia un MiFoo más...

Ahora si me lo reconoce el editor phpStorm, pero no la programacion que me devuelve el error:
Código HTML:
Ver original
  1. Fatal error: Class 'Abkrim\Rbackcp\MiFoo\MiFoo' not found in /path/proyecto/test.php on line 8

Donde la linea 8 es ->
Código PHP:
Ver original
  1. $request = new MiFoo($variable);
Gracias por tu tiempo.

Última edición por abkrim; 28/07/2015 a las 07:05 Razón: Codigo
  #6 (permalink)  
Antiguo 28/07/2015, 07:35
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Uso de namespaces con PSR-4

Buenas,

Revisa que el namespace, el use, y la clase están correctas, hay algo que está bailando.

La clase debería ser así:
Código:
namespace Abkrim\Rbackcp;

class MiFoo
{
    //...
}
Desde donde la llamas:
Código:
use Abkrim\Rbackcp\MiFoo

$variable = 1;
$miFoo = new MiFoo($variable);

// return int 1
var_dump($miFoo->getVariable());
Puedes probar también con:
Código:
$variable = 1;
$miFoo = new \Abkrim\Rbackcp\MiFoo($variable);

// return int 1
var_dump($miFoo->getVariable());
Si está todo correcto no debería dar error.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Última edición por Uncontroled_Duck; 28/07/2015 a las 09:10
  #7 (permalink)  
Antiguo 28/07/2015, 08:08
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Uso de namespaces con PSR-4

Recuerda agregar el autoload
Código PHP:
Ver original
  1. require 'vendor/autoload.php';
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 05/08/2015, 04:58
 
Fecha de Ingreso: julio-2015
Ubicación: Tiznit (Marruecos)
Mensajes: 14
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de namespaces con PSR-4

Grcais... despiste el mio el no poner el auto-load.

De todas formas requirieo algun toque mas, que publicare mas adelante.

Saludos.

Etiquetas: namespace, oop, poo
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 08:12.