Я просто подумал о другом способе:
Используя магические методы PHP5 __get
и __set
, вы можете сделать так, чтобы свойства с подчеркиванием существовали, а на самом деле их нет. Преимущество в том, что если есть какой-то другой код, который не ожидает преобразования имен полей, они все равно будут работать:
function __get($var) {
if (strpos($var, '-') !== false) {
$underscored = str_replace("-", "_", $var);
return $this->$underscored;
}
}
function __set($var, $val) {
if (strpos($var, '-') !== false) {
$underscored = str_replace("-", "_", $var);
$this->$underscored = $val;
}
}
echo $company->{'address-one'}; // "3 Sesame St"
echo $company->address_one; // "3 Sesame St"
// works as expected if you somehow have both dashed and underscored var names
// pretend: $company->{'my-var'} ==> "dashed", $company->my_var ==> "underscored"
echo $company->{'my-var'}; // "dashed"
echo $company->my_var; // "underscored"
Конечно, вам нужно найти какой-то способ на самом деле присоединить эти методы к классу ваших элементов. Я не очень хорош в подобных вещах, но, возможно, это сработает с помощью PHP-функций Reflection или создания класса-оболочки.