From 9100f94b8f20a7edc12f1fc5b6ad75a8a3679705 Mon Sep 17 00:00:00 2001 From: Pavel Zelezny Date: Mon, 26 Oct 2015 16:11:42 +0100 Subject: [PATCH] DibiConnection: option 'driver' can contain driver instance or class name [Closes #153] --- dibi/libs/DibiConnection.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/dibi/libs/DibiConnection.php b/dibi/libs/DibiConnection.php index 8020d48a..bfef3cd5 100644 --- a/dibi/libs/DibiConnection.php +++ b/dibi/libs/DibiConnection.php @@ -75,19 +75,26 @@ class DibiConnection extends DibiObject $config['driver'] = dibi::$defaultDriver; } - $class = preg_replace(array('#\W#', '#sql#'), array('_', 'Sql'), ucfirst(strtolower($config['driver']))); - $class = "Dibi{$class}Driver"; - if (!class_exists($class)) { - include_once dirname(__FILE__) . "/../drivers/$class.php"; + if ($config['driver'] instanceof IDibiDriver) { + $this->driver = $config['driver']; + $config['driver'] = get_class($this->driver); + } elseif (PHP_VERSION_ID >= 50307 && is_subclass_of($config['driver'], 'IDibiDriver')) { + $this->driver = new $config['driver']; + } else { + $class = preg_replace(array('#\W#', '#sql#'), array('_', 'Sql'), ucfirst(strtolower($config['driver']))); + $class = "Dibi{$class}Driver"; + if (!class_exists($class)) { + include_once dirname(__FILE__) . "/../drivers/$class.php"; - if (!class_exists($class, FALSE)) { - throw new DibiException("Unable to create instance of dibi driver '$class'."); + if (!class_exists($class, FALSE)) { + throw new DibiException("Unable to create instance of dibi driver '$class'."); + } } + $this->driver = new $class; } $config['name'] = $name; $this->config = $config; - $this->driver = new $class; $this->translator = new DibiTranslator($this); // profiler