2

我有一个名为 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 }

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

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

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

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

如何使用“use”关键字正确包含类?

4

2 回答 2

5

use关键字实际上并没有做任何事情。您必须手动包含PHPinclude \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');

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

于 2013-09-18T14:36:48.380 回答
2

您还可以使用 composer 自动加载(不过对您App来说src/会有所不同):

{
    "require": {

    },
    "autoload": {
        "psr-0": {
            "App": "src/"
        }
    }
}

您可能还必须composer.phar dumpautoload在控制台中运行。

于 2015-09-07T10:16:50.183 回答