3v4l.org

run code in 300+ PHP versions simultaneously
<?php try { $db = DatabasePDOTest::getInstance(); var_dump($db->connectToDatabase('test')); } catch (Exception $ex) { var_dump($ex); } echo "end"; final class DatabasePDOTest extends PDO { const STANDARD_DB = 'standard'; const DBHOST = 'host'; const DBUSER = 'user'; const DBPASS = 'password'; const DBNAME = 'dbname'; private static $_instance = null; private $_persistent = false; private $_databases = array(); private $_databaseHost = null; private $_databaseUser = null; private $_databasePass = null; private $_database = null; private $_charset = 'utf8'; public function __construct($persistent = false, $pathAddition = null, $databaseIdentifier = null) { $this->_loadConfig($pathAddition); $this->_persistent = $persistent; if (! is_null($databaseIdentifier)) { $this->connectToDatabase($databaseIdentifier); } else { if (array_key_exists(self::STANDARD_DB, $this->_databases)) { $this->connectToDatabase($this->_databases[self::STANDARD_DB]); } else { throw new InvalidArgumentException('no database set and no standard found'); } } } public function connectToDatabase($name) { if (! array_key_exists($name, $this->_databases)) { throw new UnexpectedValueException('identifier "' . $name . '" for database does not exist!'); } $this->_databaseHost = $this->_databases[$name][self::DBHOST]; $this->_databaseUser = $this->_databases[$name][self::DBUSER]; $this->_databasePass = $this->_databases[$name][self::DBPASS]; $this->_database = $this->_databases[$name][self::DBNAME]; return $this->connect(); } public static function getInstance($persistent = true, $pathAddition = null, $databaseIdentifier = null) { if (self::$_instance === null) { self::$_instance = new DatabasePDOTest($persistent, $pathAddition, $databaseIdentifier); } return self::$_instance; } public function getOneResultFlat(PDOStatement $stmt) { $results = $stmt->fetchAll(PDO::FETCH_ASSOC); $return = array(); array_walk_recursive($results, function ($a) use (&$return) { $return[] = $a; }); return $return; } public function getMultipleResultFlat(PDOStatement $stmt) { $results = $stmt->fetchAll(PDO::FETCH_ASSOC); $returnArray = array(); foreach ($results as $value) { foreach ($value as $key => $var) { $returnArray[$key][] = $var; } } return $returnArray; } public function getResultArray($sql) { $stmt = $this->query($sql); return $stmt->fetchAll(PDO::FETCH_ASSOC); } private function connect() { parent::__construct(sprintf('mysql:host=%1$s;dbname=%2$s;charset=%3$s', $this->_databaseHost, $this->_database, $this->_charset), $this->_databaseUser, $this->_databasePass, array( PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => $this->_persistent )); return true; } private function _loadConfig($pathAddition = null) { $this->_databases = array( "test" => array( "host" => "localhost", "user" => "test", "password" => "test", "dbname" => "test" ), "standard" => "test" ); } }

preferences:
52.69 ms | 402 KiB | 5 Q