简体   繁体   English

使用名称空间的第一步

[英]First steps using namespaces

is the first time that uses Namespaces in a project. 是第一次在项目中使用命名空间。 I have 3 classes: 我有3节课:

Contacto.class.php 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 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 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 ... }

The path of the classes is ROOT/classes/Abm . 类的路径是ROOT/classes/Abm So, when include the classes to work: 因此,当包括要工作的类时:

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");

Fails with the next message: Class 'AdminManantiales\\Classes\\Abm\\Usuario' not found in <b>/media/Datos/www/AdminManantiales/classes/Abm/Alumno.class.php</b> on line <b>12</b> 下一条消息失败: Class 'AdminManantiales\\Classes\\Abm\\Usuario' not found in <b>/media/Datos/www/AdminManantiales/classes/Abm/Alumno.class.php</b> on line <b>12</b>

Any ideas ?. 有任何想法吗 ?。

When defining namespace you shouldn't use class name in it. 定义名称空间时,不应在其中使用类名。

Class with definition: 具有定义的类:

namespace AdminManantiales\Classes\Abm;

abstract class Usuario { // Implement ... }

will be accessible after using 使用后将可访问

use AdminManantiales\Classes\Abm\Usuario;

or 要么

class Alumno extends \AdminManantiales\Classes\Abm\Usuario { // Implement ... }

To explain it better: namespace can be considered as bag and class will be item in that bag. 更好地解释一下:命名空间可以视为bag,而class将是该bag中的项。 To access selected item you have to provide name of the bag ( AdminManantiales\\Classes\\Abm ) and this item ( Usuario ) :) 要访问选定的物品,您必须提供行李袋的名称( AdminManantiales\\Classes\\Abm )和此物品( Usuario ):)

You are putting each class in its own namespace because you are including the class name in the namespace name. 您将每个类放在其自己的名称空间中,因为要在名称空间名称中包含类名称。

Instead of doing this, do this for all your classes: 代替对所有类执行此操作:

namespace AdminManantiales\Classes\Abm;

This will also let you simplify the syntax. 这也将使您简化语法。 Now that the classes are in the same namespace you don't need to refer to them with fully qualified names, so this will work: 现在,这些类位于相同的名称空间中,您无需使用完全限定的名称来引用它们,因此这将起作用:

class Alumno extends Usuario { ... }

Never use slashes and dot in namespace declaration. 切勿在名称空间声明中使用斜杠和点。

wrong formats:

<?php

namespace first\second.w;

?>

<?php

namespace first/second;

?>

check here php.net 在这里检查php.net

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM