2011-12-28 25 views
14

MySQLi works fine inside a class with no namespace and outside a class.Cómo utilizar MySQLi dentro de un espacio de nombres

recientemente he empezado a utilizar espacio de nombres y ahora he tropezado con un código muy similar a la siguiente:

namespace Project; 

class ProjectClass{ 

     public static function ProjectClassFunction{ 
      $db = new mysql(data, data, data, data); 
     } 

} 

Sin embargo, se informa de nuevo a mí con un mensaje

"Fatal error: Class 'Project\mysqli' not found"

Mi pregunta es; ¿Cómo uso mysqli dentro de una clase que usa namespace?

Respuesta

30

De forma predeterminada, PHP intentará cargar clases desde su espacio de nombres actual. Referirse a la clase en el espacio de nombres global:

$db = new \mysqli(/* ... */); 

Esto es lo mismo que harías cuando se refiere a una clase en un espacio de nombres diferentes:

$foo = new \Some\Namespace\Foo(); 

Tenga en cuenta que si se deja fuera el comienzo barra invertida, PHP trataría de cargar la clase relativa a su espacio de nombres actual. El siguiente código se verá en el espacio de nombres Project\Some\Namespace para una clase llamada Foo:

namespace Project; 
$foo = new Some\Namespace\Foo(); 

Alternativamente, puede importar los espacios de nombres de forma explícita y se ahorrará la ambigüedad:

namespace Project; 

use Mysqli; 

class ProjectClass 
{ 
    public static function ProjectClassFunction() 
    { 
     $db = new Mysqli(/* ... */); 
    } 
} 
+2

Más información: http: //www.php .net/manual/es/language.namespaces.fallback.php – cmbuckley

+0

Gracias por la iluminación. –

Cuestiones relacionadas