2013-09-16 21 views
1

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

任何想法?

+1

寬多定義EL名字空間中沒有pongas EL農佈雷德拉CLASE人最終 –

+0

確保Usuario.class.php需要/包括類Alumno之前,因爲你的錯誤指示類Usuario在擴展Alumno時不存在 – DKSan

+1

@RubenSerratePardo gracias amigo,ha funcionado!。 – ramiromd

回答

4

定義名稱空間時,不應該在其中使用類名稱。

類與定義:使用

use AdminManantiales\Classes\Abm\Usuario; 

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

解釋它更好地後

namespace AdminManantiales\Classes\Abm; 

abstract class Usuario { // Implement ... } 

將可以訪問:命名空間可視爲袋類將是那個包裏的物品。要訪問選中的項目,你必須提供袋(AdminManantiales\Classes\Abm)和這個項目(Usuario):)

+0

嗡嗡...他不是在做你建議的第二種方式嗎? – Oliboy50

+0

@ Oliboy50不,請檢查他的命名空間定義。 –

+0

哦,我明白了,你是對的 – Oliboy50

3

你把每個類在其自己的命名空間,因爲你要包括在命名空間名稱的類名的名稱。

而不是做這個的,對於所有的類都做到這一點:

namespace AdminManantiales\Classes\Abm; 

這也將讓你簡化的語法。現在,類在你不需要引用它們與完全合格的名稱相同的命名空間,所以這將工作:

class Alumno extends Usuario { ... } 
1

不要使用斜線和斑點的命名空間聲明。

wrong formats: 

<?php 

namespace first\second.w; 

?> 

<?php 

namespace first/second; 

?> 

檢查這裏php.net