У меня есть абстрактный класс ‘AbstractClassA’:
abstract class AbstractClassA {
//some code...
public static function isValidID($id) { ... }
}
И еще один абстрактный класс:
abstract class AbstractClassB extends AbstractClassA {
const id = 1111;
}
Затем, когда я объявляю следующее в третьем классе:
class OrdinaryClass {
public static function canDoIt($id) {
return AbstractClassB::isValidID($id);
}
}
Затем я получаю следующую ошибку при проверке следующего:
OrdinaryClass::canDoIt(1111);
«Неустранимая ошибка: необработанная ошибка: класс« AbstractClassB »не найден в OrdinaryClass.class.php в строке ##»
Что я делаю неправильно?
При наличии файлов в разных файлах, вы должны require
сначала их перед использованием:
<?php
require_once "/path/to/AbstractClassA.php";
require_once "/path/to/AbstractClassB.php";
class OrdinaryClass {
public static function canDoIt($id) {
return AbstractClassB::isValidID($id);
}
}
Есть возможность зарегистрироваться автопогрузчик для этого нужно сделать автоматически.
// autoloader.php
spl_autoload_register(function ($className) {
include __DIR__ . '/' . $className . '.php';
});
// OrdinaryClass.php
require 'autoloader.php';
class OrdinaryClass {
/* ... */
}
Других решений пока нет …