Estoy implementación de espacios de nombres en mi proyecto existente. He encontrado que se puede utilizar la palabra clave ‘uso’ para importar las clases en el espacio de nombres. Mi pregunta es, ¿puedo importar todas las clases de 1 espacio de nombres en la otra. Ejemplo:

namespace foo
{

    class bar
    {

        public static $a = 'foobar';

    }

}

namespace
{
    use \foo;  //This doesn't work!
    echo bar::$a;
}

Actualización de PHP 7+

Una nueva función en PHP 7 se agrupan las declaraciones. Esto no es tan fácil como usar 1 ‘declaración de uso» para todas las clases en un determinado espacio de nombres, pero hace un poco más fácil…

Ejemplo de código:

<?php
//Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

//PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
?>

Ver también: https://secure.php.net/manual/en/migration70.new-features.php#migration70.new-features.group-use-declarations

  • Cuenta que «Importar» no significa que en realidad se puede encontrar esa clase. Usted todavía necesita tener esa clase accesible a través de cualquiera de un manual requieren o un cargador automático.
  • Por supuesto, pero no sé cómo decirlo en otras palabras.
  • Lo pensé, pero para evitar confusiones 🙂
  • Cuando leí la actualización en PHP7 me frunció el ceño. Estoy desanimado PHP no se dio cuenta de lo conveniente que sería para abrir TODAS las clases en un espacio de nombres. En java sólo tienes use foo/*
  • Es feo, pero el import_namespace('Hamcrest', __NAMESPACE__); definido por la implementación de aquí conseguirá el trabajo hecho: stackoverflow.com/questions/3358099/…
  • Buena adición. Si estás de acuerdo con la habilitación de eval apoyar esta podría ser una solución. Personalmente, yo no lo recomiendo.

InformationsquelleAutor Rob | 2011-08-19

2 Comentarios

  1. 63

    Esto no es posible en PHP.

    Todo lo que puedes hacer es:

    namespace Foo;
    
    use Bar;
    
    $obj = new Bar\SomeClassFromBar();
    • O, por supuesto, usted puede poner clases concretas en el uso clausule. (use Bar\SomeClassFromBar; $obj = new SomeClassFromBar();)
    • Proveniente de C# mundo, esto no suena muy agradable. :- (
    • Me encanta PHP hasta entonces me presentaron a real la programación orientada a objetos. Todavía estoy usando PHP, pero esta es una de las razones por las que me podría convertir a C#
  2. 0

    Usted puede utilizar el «como» para acortar y aliasing largos espacios de nombres

    compositor.json

    {
    "autoload": {
        "psr-4": {
            "Lorem\Ipsum\": "lorem/ipsum",
            "Lorem\Ipsum\Dolor\": "lorem/ipsum/dolor",
            "Lorem\Ipsum\Dolor\Sit\": "lorem/ipsum/dolor/sit"
        }
    }

    }

    index.php

    <?php
    
    use Lorem\Ipsum\Dolor\Sit as FOO;
    
    define ('BASE_PATH',dirname(__FILE__));
    require BASE_PATH.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
    
    $bar = new FOO\Bar();
    $baz = new FOO\Baz();
    $qux = new FOO\Qux();

Dejar respuesta

Please enter your comment!
Please enter your name here