использую реестр:
class Registry {
public static $objects = array();
protected static $instance;
/*protected function __construct() { //метод для автодобавления классов в файл конфигурации
global $config;
foreach ($config['pages'] as $name => $obj) {
self::$objects[$name] = new $obj;
}
}*/
public static function instance () {
if(self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
public function __set($name, $value) {
if (!isset(self::$objects[$name])) {
self::$objects[$name] = new $value;
}
}
public function __get($name) {
if (is_object(self::$objects[$name])) {
return self::$objects[$name];
}
}
}
для того чтоб пользоваться нужными классами в необходимое время и необходимом месте кода, далее загрузчик всех дополнительных классов из папок libs и models:
class LoadClasses {
private $app;
public function __construct() {
return $this->app = Registry::instance();
}
public function LoadLibs ($dir) {
if($handle = opendir($dir)){
while(false !== ($file_dir = readdir($handle))) {
if($file_dir != "." && $file_dir != ".."){
$data = file_get_contents($dir.'/'.$file_dir);
preg_match_all('/class [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $data, $matches);
if (!empty($matches[0])) {
foreach ($matches[0] as $val) {
$className = 'lib_'.substr($val, 6);
$this->app->$className = substr($val, 6);
}
}
}
}
}
}
public function LoadModels ($dir) {
if($handle = opendir($dir)){
while(false !== ($file_dir = readdir($handle))) {
if($file_dir != "." && $file_dir != ".."){
$data = file_get_contents($dir.'/'.$file_dir);
preg_match_all('/class [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $data, $matches);
if (!empty($matches[0])) {
foreach ($matches[0] as $val) {
$classNameMods = 'mod_'.substr($val, 6);
$this->app->$classNameMods = substr($val, 6);
}
}
}
}
}
}
}
$loader = new LoadClasses();
в чем собственно проблема, все файлы с кассами из каталога libs успешно обрабатываются и заносятся в реестр и после этого я могу с ними работать когда мне это нужно и где, но вот с классами из каталога models проблема что они выводят результат даже если не обращаться к этому классу в файле индекс вызываю загрузчики классов:
$loader->LoadLibs(WWW.'/libs');
$loader->LoadModels(WWW.'/models');
пример класса из каталога libs:
class validateForms {
public function FormData ($data) {
echo $data . ' Fuck! ';
}
}
пример класса из каталоога models:
class MainModel extends Model {
public function mainModel () {
echo __CLASS__." model! ";
}
}
почему классы из models выводят результат даже если к ним не обращаться??? будно сами собой!
Ну потому что у вас название функции mainModel
а название класса MainModel
.
Такую ситуацию PHP
воспринимает равносильно __construct
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты