PHP - 访问没有区分大小写的对象属性?

Dan*_*Dan 6 php properties object

我正在开发一个旧应用程序,其中使用的命名约定存在很多不一致之处.

有没有办法访问忽略区分大小写的对象属性?

例如,我有一个名为currentuser的对象,其属性为Name.

有没有办法像这样检索这个值?

$currentuser->name
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏

谢谢.

Tat*_*nen 5

好吧,您可以__get为每个类编写一个函数来处理此类转换,但这非常麻烦。像这样的事情可能会起作用:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以这样做:

$newclass = new HasInconsistentNaming();

echo $newclass->foobar; // outputs 1
Run Code Online (Sandbox Code Playgroud)

如果您想稍微简化您的任务,您可以让您的基类继承自提供此功能的类。这样您就不必为每个类编写函数:

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;
}
Run Code Online (Sandbox Code Playgroud)

但我强烈建议您不要采取这种方法。从长远来看,将所有变量转换为一致的命名方案会更明智。