<?php
class Buyers
{
    // Свойства - Классы API
    private $classes = array(
        'config'     => 'Config',
        'request'    => 'Request',
        'db'         => 'Database',
        'settings'   => 'Settings',
        'banners'    => 'Banners',
        'files'      => 'Files',
        'design'     => 'Design',
        'pages'      => 'Pages',
        'images'     => 'Images',
        'comments'   => 'Comments',
        'feedbacks'  => 'Feedbacks',
        'notify'     => 'Notify',
        'managers'   => 'Managers',
        'schema'     => 'Schema',
        'routes'     => 'Routes',
        'sessions'   => 'Sessions',
        'custom'     => 'Custom',
        'blog'       => 'Blog',
    );

    // Созданные объекты
    private static $objects = array();

    public function __construct()
    {

    }
    /**
     * Магический метод, создает нужный объект API
     */
    public function __get($name)
    {
        // Если такой объект уже существует, возвращаем его
        if(isset(self::$objects[$name]))
        {
            return(self::$objects[$name]);
        }

        // Если запрошенного API не существует - ошибка
        if(!array_key_exists($name, $this->classes))
        {
            return null;
        }

        // Определяем имя нужного класса
        $class = $this->classes[$name];

        // Подключаем его
        include_once(dirname(__FILE__).'/'.strtolower($class).'.php');

        // Сохраняем для будущих обращений к нему
        self::$objects[$name] = new $class();

        // Возвращаем созданный объект
        return self::$objects[$name];
    }
}
