artabro/wire/core/DatabaseMysqli.php
2024-08-27 11:35:37 +02:00

57 lines
1.7 KiB
PHP

<?php namespace ProcessWire;
/**
* Temporary wrapper to mysqli Database class for mysqli => PDO transition
*
* This is for temporary use while transitioning from mysqli to PDO
*
* It's entire purpose is to ensure that a $db API variable is available, while not
* actually instantiating mysqli (and forming a mysql connection) until the $db
* variable is called upon to do something.
*
* This file is licensed under the MIT license
* https://processwire.com/about/license/mit/
*
*/
class DatabaseMysqli {
protected $config = null;
protected $db = null;
protected $callers = array();
public function __construct(Config $config) {
$this->config = $config;
}
protected function db($key, $type) {
if(is_null($this->db)) $this->db = new Database($this->config);
if($this->config->debug) $this->recordCaller($key, $type);
return $this->db;
}
public function __get($key) {
return $this->db($key, 'property')->$key;
}
public function __call($method, $arguments) {
$db = $this->db($method, 'method');
return call_user_func_array(array($db, $method), $arguments);
}
public function isInstantiated() {
return $this->db !== null;
}
public function getCallers() {
return $this->callers;
}
protected function recordCaller($key, $type) {
$caller = 'unknown';
if(defined('DEBUG_BACKTRACE_IGNORE_ARGS')) $traces = @debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
else $traces = @debug_backtrace();
if(isset($traces[1]) && isset($traces[1]['file']) && $traces[1]['file'] != __FILE__) $caller = $traces[1]['file'];
else if(isset($traces[2]) && isset($traces[2]['file']) && $traces[2]['file'] != __FILE__) $caller = $traces[2]['file'];
$this->callers[] = "$caller ($type: $key)";
}
}