使用命名空间找不到的类

ram*_*omd 2 php namespaces

我有一个名为Alumno.class.php的类,位于Root\Classes\Abm\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;

class Alumno extends Usuario{ // Implement }
Run Code Online (Sandbox Code Playgroud)

现在,我需要在php脚本中使用该类,并尝试使用:

use \AdminManantiales\Classes\Abm\Alumno as AbmAlumno;
[...]
// Proceso el alta.
$alumno = new AbmAlumno();
$alumno->alta($_POST);
$nombreCompleto = $alumno->toStr();
Run Code Online (Sandbox Code Playgroud)

但它失败了$alumno = new AbmAlumno();.随着下一条消息:

找不到"AdminManantiales\Classes\Abm\Alumno"类

如何使用"use"关键字正确包含该类?

fed*_*o-t 5

该use关键字不真正做任何事情.您必须手动包含PHP脚本,使用include \AdminManantiales\Classes\Abm\Alumno.php(或任何文件路径)或使用像这样的自动加载,

function autoload($classId)
{
    $classIdParts       = explode("\\", $classId);
    $classIdLength      = count($classIdParts);
    $className          = strtolower($classIdParts[$classIdLength - 1]);
    $namespace          = strtolower($classIdParts[0]);

    for ($i = 1; $i < $classIdLength - 1; $i++) {
        $namespace .= '/' . $classIdParts[$i];
    }

    if (file_exists(dirname(__FILE__)) 
        . '/' . $namespace 
        . '/' . $className 
        . '.class.php') {
        include $namespace . '/' . $className . '.class.php';
    }
}

spl_autoload_register('autoload');
Run Code Online (Sandbox Code Playgroud)

然后,您可以存储此脚本并将其包含在您使用use关键字的任何脚本中.