В любом случае, это странная настройка. Вам определенно НЕ следует использовать некоторые функции начальной загрузки для предварительной загрузки ваших классов, особенно если некоторые классы имеют конечные зависимости от других классов. Что было бы немного лучше, это:
Ваши классы Security и ErrorHandler должны использовать либо статические методы, чтобы позволить использовать их функциональные возможности без объявления класса, либо они должны быть созданы как класс var класса Application.
class Security {
// can be invoked anywhere using Security::somefunction('blah');
public static somefunction($somevar) { ... }
}
ИЛИ
require_once('security.php');
require_once('errorhandler.php');
class Application {
public $security;
public $errorHandler;
public function __construct() {
$this->security = new Security;
$this->errorHandler = new ErrorHandler;
}
}
Я не уверен, что вы имеете в виду, когда говорите, что не можете получить доступ к данным из любого класса. Классы должны, естественно, наследовать любые переменные и функции, объявленные их родителями. Так, например:
require_once('application.php');
class User extends Application {
public function throwError($message) {
return $this->errorHandler->somefunction($message);
}
}
Без явного объявления $this->errorHandler
внутри класса User, это все равно должно работать, так как класс $errorHandler
var объявлен в классе Application.