mirror of
https://github.com/dg/dibi.git
synced 2025-08-06 06:07:39 +02:00
dibi::$substs & fall-back provided via DibiLazyStorage
This commit is contained in:
@@ -176,11 +176,8 @@ class dibi
|
||||
/** @var DibiConnection Current connection */
|
||||
private static $connection;
|
||||
|
||||
/** @var array Substitutions for identifiers */
|
||||
public static $substs = array();
|
||||
|
||||
/** @var callback Substitution fallback */
|
||||
public static $substFallBack = array(__CLASS__, 'defaultSubstFallback');
|
||||
/** @var DibiLazyStorage Substitutions for identifiers */
|
||||
public static $substs;
|
||||
|
||||
/** @var array @see addHandler */
|
||||
private static $handlers = array();
|
||||
@@ -638,7 +635,7 @@ class dibi
|
||||
*/
|
||||
public static function addSubst($expr, $subst)
|
||||
{
|
||||
self::$substs[$expr] = $subst;
|
||||
self::$substs->$expr = $subst;
|
||||
}
|
||||
|
||||
|
||||
@@ -651,9 +648,9 @@ class dibi
|
||||
public static function removeSubst($expr)
|
||||
{
|
||||
if ($expr === TRUE) {
|
||||
self::$substs = array();
|
||||
self::$substs = new DibiLazyStorage(self::$substs->getCallback());
|
||||
} else {
|
||||
unset(self::$substs[$expr]);
|
||||
unset(self::$substs->$expr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -666,12 +663,7 @@ class dibi
|
||||
*/
|
||||
public static function setSubstFallback($callback)
|
||||
{
|
||||
if (!is_callable($callback)) {
|
||||
$able = is_callable($callback, TRUE, $textual);
|
||||
throw new InvalidArgumentException("Handler '$textual' is not " . ($able ? 'callable.' : 'valid PHP callback.'));
|
||||
}
|
||||
|
||||
self::$substFallBack = $callback;
|
||||
self::$substs->setCallback($callback);
|
||||
}
|
||||
|
||||
|
||||
@@ -755,3 +747,8 @@ class dibi
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// static constructor
|
||||
dibi::$substs = new DibiLazyStorage(array('dibi', 'defaultSubstFallback'));
|
@@ -543,8 +543,7 @@ final class DibiTranslator extends DibiObject
|
||||
|
||||
if ($matches[8]) { // SQL identifier substitution
|
||||
$m = substr($matches[8], 0, -1);
|
||||
$m = isset(dibi::$substs[$m]) ? dibi::$substs[$m] : call_user_func(dibi::$substFallBack, $m);
|
||||
return $matches[9] == '' ? $this->formatValue($m, FALSE) : $m . $matches[9]; // value or identifier
|
||||
return $matches[9] == '' ? $this->formatValue(dibi::$substs->$m, FALSE) : dibi::$substs->$m . $matches[9]; // value or identifier
|
||||
}
|
||||
|
||||
die('this should be never executed');
|
||||
@@ -591,8 +590,7 @@ final class DibiTranslator extends DibiObject
|
||||
*/
|
||||
private static function subCb($m)
|
||||
{
|
||||
$m = $m[1];
|
||||
return isset(dibi::$substs[$m]) ? dibi::$substs[$m] : call_user_func(dibi::$substFallBack, $m);
|
||||
return dibi::$substs->{$m[1]};
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user