Ваша основная проблема, как я вижу, это отсутствие оператора USE и тот факт, что TrigerError
является методом, а не классом.
Чтобы исправить это:
namespace Core\MySQLiDrv;
use Core\Errors\Errors;
class MySQLiDrv {
public $db = null;
public function __construct($database) {
$connector = mysqli_connect($database[0], $database[1], $database[2], $database[3]);
if(!$connector)
{
return (new Errors)->TrigerError("1");
}
}
}
Полный рабочий код:
namespace Core{
class Engine {
}
}
namespace Core\Errors{
class Errors {
public function TrigerError($e)
{
die($e);
}
}
}
namespace Core\MySQLiDrv{
use Core\Errors\Errors;
class MySQLiDrv {
public $db = null;
public function __construct($database) {
//$connector = mysqli_connect($database[0], $database[1], $database[2], $database[3]);
//if(!$connector)
//{
return (new Errors)->TrigerError("1");
//}
}
}
}
//default global namesapce
namespace {
use Core\Engine;
use Core\MySQLiDrv\MySQLiDrv;
$engine = new Engine();
$db = new MySQLiDrv(array("localhost", "user", "pass", "db"));
}
Выход
1
Песочница
Единственное реальное отличие состоит в том, что при использовании нескольких пространств имен водин файл (песочница) вы должны заключить в код с {}
.Вы можете удалить их, если это отдельные файлы.Хорошо, и я не могу использовать функции DB в песочнице, но это не имеет значения в этом примере, потому что мы хотим вызвать ошибку.
Однако, как сказано в комментариях, я бы посмотрел на Autoloading
и Exceptions
и то, и другое поможет вам в этом.
У меня есть автозагрузчик на github , с которым вы можете поэкспериментировать, если хотите, это похоже на то, что Composer использует / делает.Композитор просто более стандартизирован.
Autoloadig в основном использует комбинацию пространства имен и класса для поиска файла во время выполнения (когда создается экземпляр класса).Так что есть некоторые соглашения об именах, о которых нужно знать, например, возьмите ваш класс Core\Errors\Errors
, он должен находиться в Core/Errors/Errors.php
Пространство имен и путь к файлу должны быть одинаковыми.Это означает, что вы можете исключить все операторы включения, и это автоматически загружает файлы, когда это необходимо.