假设我有允许代理不同适配器实例的静态连接器:
$m = Connector::take('mcrouter');
$db = Connector::take('production_database');
连接器必须在运行时初始化和处理连接:
protected $connection;
abstract protected function openConnection($config);
适配器内部的某处:
$this->connection = $this->openConnection($config);
连接是一个对象,可以是 Memcached、MySQLi 等的实例,也可以是 NULL。所以从逻辑上讲,我想这样做:
protected ?object $connection;
abstract protected function openConnection($config):?object;
但同时连接并不是真正的“对象”实例,例如是 Memcached 的实例,结果是:
可捕获的致命错误:黑客类型错误:无效分配
在这种情况下,唯一可行的解决方案是根本不定义类型。定义通用对象是否有一些技巧?