1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <?php
- namespace 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;
- }
- }
|