使用命名空间的第一步

时间:2013-09-16 12:34:07

标签: php namespaces

是第一次在项目中使用命名空间。 我有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>

任何想法?。

3 个答案:

答案 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