我有一个名为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”关键字正确包含该类?。
答案 0 :(得分:5)
use
关键字实际不执行任何操作。你必须手动包含PHP脚本,使用include \AdminManantiales\Classes\Abm\Alumno.php
(或任何文件路径)或使用autoloading这样,
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
关键字的任何脚本中。
答案 1 :(得分:1)
您也可以使用自动加载功能(App
和src/
对您来说不同):
{
"require": {
},
"autoload": {
"psr-0": {
"App": "src/"
}
}
}
您可能还必须在控制台中运行composer.phar dumpautoload
。