Class 在目录中找不到
Class not found in directory
我在命名空间中组织了一些 classes,如下所示:
src/bases/BaseObject.php
<?php
namespace API\bases;
use \API\system\Database as Database;
class BaseObject {
protected $db = null;
public function __construct() {
$this->db = Database::instance();
}
}
src/objects/User.php
<?php
namespace API\objects;
class User extends \API\bases\BaseObject {
}
src/autoload.php
<?php
spl_autoload_register(
function($class) {
$path_parts = explode("\", $class);
if ($path_parts[0] == 'API') {
array_shift($path_parts);
}
require(__DIR__ . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $path_parts) . ".php");
}
);
我已经实现了其他 classes,但在这种情况下,当我实例化一个 User 对象时,它 returns 这是致命的:
Fatal error: Class 'API\bases\BaseObject' not found in /realpath/to/api/src/objects/User.php on line 4
User.php:4
是 class User extends \API\bases\BaseObject {
行。对我来说,这没有意义,因为我也在另一个 class 继承中以同样的方式使用了它。你看到我跳过了什么吗?
编辑: 值得注意的是,我手动要求 class,它告诉 could not redeclare class
,所以它似乎无论如何都能找到。
我不知道为什么,因为我已经重写了 3 次 class,但看起来 space 在 BaseObject class 中给出了问题。我删除了 BaseObject
和左花括号之间的 space,它起作用了。
我在命名空间中组织了一些 classes,如下所示:
src/bases/BaseObject.php
<?php
namespace API\bases;
use \API\system\Database as Database;
class BaseObject {
protected $db = null;
public function __construct() {
$this->db = Database::instance();
}
}
src/objects/User.php
<?php
namespace API\objects;
class User extends \API\bases\BaseObject {
}
src/autoload.php
<?php
spl_autoload_register(
function($class) {
$path_parts = explode("\", $class);
if ($path_parts[0] == 'API') {
array_shift($path_parts);
}
require(__DIR__ . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $path_parts) . ".php");
}
);
我已经实现了其他 classes,但在这种情况下,当我实例化一个 User 对象时,它 returns 这是致命的:
Fatal error: Class 'API\bases\BaseObject' not found in /realpath/to/api/src/objects/User.php on line 4
User.php:4
是 class User extends \API\bases\BaseObject {
行。对我来说,这没有意义,因为我也在另一个 class 继承中以同样的方式使用了它。你看到我跳过了什么吗?
编辑: 值得注意的是,我手动要求 class,它告诉 could not redeclare class
,所以它似乎无论如何都能找到。
我不知道为什么,因为我已经重写了 3 次 class,但看起来 space 在 BaseObject class 中给出了问题。我删除了 BaseObject
和左花括号之间的 space,它起作用了。