是第一次在项目中使用命名空间。 我有3个班级:
Contacto.class.php
/**
* Gestiona las operaciones ABM de la informacion de contacto de un usuario
* cualquiera.
* La clase no realiza validaciones, eso será labor del controlador.
* @package AdminManantiales
* @subpackage Abm
* @author Ramiro Martínez D'Elía
*/
namespace AdminManantiales\Classes\Abm\Contacto;
class Contacto { // Implement ... }
Usuario.class.php
/**
* Gestiona las operaciones ABM del tipo de usuario más abstracto.
* La clase no realiza validaciones, eso será labor del controlador.
* @package AdminManantiales
* @subpackage Abm
* @author Ramiro Martínez D'Elía
*/
namespace AdminManantiales\Classes\Abm\Usuario;
abstract class Usuario { // Implement ... }
Alumno.class.php
/**
* Gestiona las operaciones ABM del tipo de usuario alumno.
* La clase no realiza validaciones, eso será labor del controlador.
* @package AdminManantiales
* @subpackage Abm
* @author Ramiro Martínez D'Elía
*/
namespace AdminManantiales\Classes\Abm\Alumno;
class Alumno extends \AdminManantiales\Classes\Abm\Usuario{ // Implement ... }
班级的路径是ROOT/classes/Abm
。
所以,当包括要工作的类时:
include($_SERVER['DOCUMENT_ROOT']."/classes/Abm/Contacto.class.php");
include($_SERVER['DOCUMENT_ROOT']."/classes/Abm/Usuario.class.php");
include($_SERVER['DOCUMENT_ROOT']."/classes/Abm/Alumno.class.php");
下一条消息失败:Class 'AdminManantiales\Classes\Abm\Usuario' not found in <b>/media/Datos/www/AdminManantiales/classes/Abm/Alumno.class.php</b> on line <b>12</b>
任何想法?。
答案 0 :(得分:4)
定义命名空间时,不应在其中使用类名。
带定义的类:
namespace AdminManantiales\Classes\Abm;
abstract class Usuario { // Implement ... }
使用后可以访问
use AdminManantiales\Classes\Abm\Usuario;
或
class Alumno extends \AdminManantiales\Classes\Abm\Usuario { // Implement ... }
为了更好地解释它:命名空间可以被视为包,而类将是该包中的项目。要访问所选项目,您必须提供行李的名称(AdminManantiales\Classes\Abm
)和此项目(Usuario
):)
答案 1 :(得分:3)
您将每个类放在自己的名称空间中,因为您在名称空间名称中包含了类名。
不要这样做,而是为所有课程执行此操作:
namespace AdminManantiales\Classes\Abm;
这也可以让您简化语法。现在这些类位于同一名称空间中,您不需要使用完全限定名称来引用它们,因此这将起作用:
class Alumno extends Usuario { ... }
答案 2 :(得分:1)
永远不要在名称空间声明中使用斜杠和点。
wrong formats:
<?php
namespace first\second.w;
?>
<?php
namespace first/second;
?>
点击php.net