| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | <?phpnamespace addons\third\library;class Application{    /**     * 配置信息     * @var array     */    private $config = [];    /**     * 服务提供者     * @var array     */    private $providers = [        'qq'      => 'Qq',        'weibo'   => 'Weibo',        'wechat'  => 'Wechat',    ];    /**     * 服务对象信息     * @var array     */    protected $services = [];    public function __construct($options = [])    {        $options = array_intersect_key($options, $this->providers);        $options = array_merge($this->config, is_array($options) ? $options : []);        foreach ($options as $key => &$option) {            $option['app_id'] = isset($option['app_id']) ? $option['app_id'] : '';            $option['app_secret'] = isset($option['app_secret']) ? $option['app_secret'] : '';            // 如果未定义回调地址则自动生成            $option['callback'] = isset($option['callback']) && $option['callback'] ? $option['callback'] : addon_url('third/index/callback', [':platform' => $key], false, true);        }        $this->config = $options;        //注册服务器提供者        $this->registerProviders();    }    /**     * 注册服务提供者     */    private function registerProviders()    {        foreach ($this->providers as $k => $v) {            $this->services[$k] = function () use ($k, $v) {                $options = $this->config[$k];                $objname = __NAMESPACE__ . "\\{$v}";                return new $objname($options);            };        }    }    public function __set($key, $value)    {        $this->services[$key] = $value;    }    public function __get($key)    {        return isset($this->services[$key]) ? $this->services[$key]($this) : null;    }}
 |