我有一个配置对象,其中包含各种对象的设置。我的类在运行时生成,只要我想要实例化一个还没有创建的类的对象,它们就依赖于配置对象来了解哪些属性是必填的以及其他一些信息。可以这样考虑:
Config
->Class1
->Attributes
->id
->Mandatory: true
->imagesource
->Mandatory: true
.................
->Class2
..........................
我有一个方法,validateObject(),它会检查对象的必填值是否都已设置,例如:
function validateObject($object){
$config = configObject[get_class($object)];
foreach($config->attributes as $attrName => $attrVal){
if($attrVal->mandatory == true){
if(!isset($object->$attrName){
throw Error();
}
}
}
}
到目前为止,一切都很顺利。现在,我的配置对象将属性名称转换为驼峰式大小写。我决定让程序员使用任何大小写方式,最终只想检查对象是否有任何属性,将其转换为小写后,与转换为小写的 Config 上的属性匹配。
我当前的解决方案可能是这样的:
function validateObject($object){
$config = configObject[get_class($object)];
foreach($config->attributes as $attrName => $attrVal){
if($attrVal->mandatory == true){
$lowercaseAttr = str_to_lower($attrName);
foreach($object as $key => $value){
if(str_to_lower($key) == $lowercaseAttr){
//don't throw, move to the next attribute in config
}
}
}
}
}
这样做可以完成任务,但需要更多的工作。我正在寻找更优雅的解决方案...希望我没有让你感到困惑,谢谢你的帮助。
areEqual('camelCase', 'camel_case')
这样的东西吗? - Álvaro González