Publiqué algunas preguntas con anterioridad sobre el uso de Namespaces en PHP y, por lo que obtuve, este código de ejemplo que tengo a continuación debería estar funcionando.No se puede encontrar la clase con PHP Namespace
Sin embargo, recibo errores cuando trato de usar Namespace en PHP de esta manera. Aquí está el primer error cuando se ejecuta el código de abajo como es ...
Fatal error: Class 'Controller' not found in E:\Controllers\testing.php on line 6
E: \ Controller \ testing.php archivo
<?php
use \Controller;
include('testcontroller.php');
$controller = new Controller;
$controller->show();
?>
E: \ Controller \ testcontroller.php archivo
<?php
use \Library\Registry;
namespace Controller
{
class Controller
{
public $registry;
function __construct()
{
include('E:\Library\Registry.class.php');
$this->registry = new Registry;
}
function show()
{
echo $this->registry;
echo '<br>Registry was ran inside testcontroller.php<br>';
}
}
}
?>
E: \ Biblioteca \ Registry.class.php archivo
<?php
namespace Library\Registry
{
class Registry
{
function __construct()
{
return 'Registry.class.php Constructor was ran';
}
}
}
?>
Como puedes ver, traté de hacerlo lo más simple posible para que funcione la parte del espacio de nombres. He intentado diferentes variaciones y parece que no puedo entenderlo.
Buen ejemplo, lo descubrí anoche pero es bueno para ti describirlo. Así que creo que sería mejor que coloque todas mis 'Bibliotecas 'en el mismo espacio de nombres como' Biblioteca' y luego en el controlador de prueba anterior podría usar 'Usar Biblioteca \ Nombre de clase' para cada clase en mi biblioteca que necesito en ese controlador para que pueda evaluarlos así '' nuevo Registro', etc. en http://www.php.net/manual/en/language.namespaces.importing.php Creo que está diciendo que esto es 'importar un global class' así que no estaba seguro de si era una mala idea – JasonDavis
Estoy tratando de limitar las dependencias de cada clase, por eso para mí no es difícil usar un nombre completamente calificado para la clase. – Timur
Eso está mal: con 'use' también defines un alias para una clase concreta. En el ejemplo 'use \ Controller; nuevo controlador; 'no es muy obvio, pero puede intentar' usar Vendor \ Package \ Component \ Controller; nuevo controlador'. Lo que quiero decir: es incorrecto, que necesitas definir el espacio de nombres de una clase _en todos los casos_. Ver el enlace en el comentario jasondeavis. Se describe cómo PHP resuelve los nombres de clase relativos. – KingCrunch