2011-04-13 15 views
5

Tengo un archivo de espacio de nombres llamado test.php con una función y una clase:no puede importar/utilizar una función de espacio de nombres en PHP

namespace Test; 
function testFunc(){} 
class TestClass{} 

Entonces, si, en otro archivo que he "uso" ambos elementos de espacio de nombres, los trabajos de clase, pero no la función:

use Test\testFunc, 
    Test\TestClass; 

include "test.php"; 
new TestClass(); 
testFunc(); 

el objeto TestClass se crea bien, pero me da un error fatal para TestFunc():

Fatal error: Call to undefined function testFunc() 

Pensé que las funciones eran compatibles con espacios de nombres. ¿Qué estoy haciendo mal?

EDIT: Explicación aquí - http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse

Respuesta

3

Ver http://php.net/manual/en/language.namespaces.rules.php con especial atención a:

<?php 
namespace A; 
use B\D, C\E as F; 

// function calls 

foo();  // first tries to call "foo" defined in namespace "A" 
      // then calls global function "foo" 

\foo();  // calls function "foo" defined in global scope 

my\foo(); // calls function "foo" defined in namespace "A\my" 

F();  // first tries to call "F" defined in namespace "A" 
      // then calls global function "F" 

Y

// static methods/namespace functions from another namespace 

B\foo(); // calls function "foo" from namespace "A\B" 

B::foo(); // calls method "foo" of class "B" defined in namespace "A" 
      // if class "A\B" not found, it tries to autoload class "A\B" 

D::foo(); // using import rules, calls method "foo" of class "D" defined in namespace "B" 
      // if class "B\D" not found, it tries to autoload class "B\D" 

\B\foo(); // calls function "foo" from namespace "B" 

\B::foo(); // calls method "foo" of class "B" from global scope 
      // if class "B" not found, it tries to autoload class "B" 
+3

Así que, básicamente, no se puede importar funciones de la misma forma que las clases? El ejemplo tampoco aclara las constantes, supongo que son lo mismo. En realidad, aquí hay una explicación más clara: http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse – Gnuffo1

Cuestiones relacionadas