Bene, è possibile scrivere una funzione __get
per ciascuna delle classi che gestirà tale conversione, ma è abbastanza hacky. Qualcosa di simile potrebbe funzionare:
class HasInconsistentNaming {
var $fooBar = 1;
var $Somethingelse = 2;
function __get($var) {
$vars = get_class_vars(get_class($this));
foreach($vars as $key => $value) {
if(strtolower($var) == strtolower($key)) {
return $this->$key;
break;
}
}
return null;
}
}
Ora, si può fare questo:
$newclass = new HasInconsistentNaming();
echo $newclass->foobar; // outputs 1
Se si vuole semplificare il vostro compito un po 'si possono avere i vostri classi di base che ereditano da una classe che fornisce questa funzionalità . In questo modo non c'è bisogno di scrivere la funzione a ciascuno dei vostri classi:
class CaseInsensitiveGetter {
function __get($var) {
$vars = get_class_vars(get_class($this));
foreach($vars as $key => $value) {
if(strtolower($var) == strtolower($key)) {
return $this->$key;
break;
}
}
return null;
}
}
class HasInconsistentNaming extends CaseInsensitiveGetter {
var $fooBar = 1;
var $Somethingelse = 2;
}
Ma vorrei caldamente di scoraggiare da questo approccio. A lungo termine, sarebbe molto più intelligente convertire semplicemente tutte le variabili in uno schema di denominazione coerente.
fonte
2010-02-12 13:46:07
* Vecchio * significa PHP4? – Gordon
In parte. C'è anche molta inconsistenza nei nomi dei campi del database, che complica ulteriormente le cose. – Dan