嗯,我有一个配置对象,其中包含各种对象的设置。我的类是在运行时生成的,因为我想要初始化一个尚未创建的类的新对象,因此它们依赖于配置对象来知道哪些属性是必需的,以及其他一些信息: 认为它有点像这样的:PHP isset - 测试不区分大小写
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();
}
}
}
}
到目前为止,一切都很好。恰巧现在,我的配置对象将属性名称变成了camelCase。我决定让程序员使用他们希望的任何外壳,最后,我只想检查对象是否具有任何属性,该属性转换为小写,会将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
}
}
}
}
}
这将做的工作,但它需要更多的工作。我一直在寻找一个更好的解决方案...
我希望我不是混乱的,感谢您的帮助
..strtolower()? –
也许你应该将所有属性转换为一种情况(可能是小写)。 – Oyeme
我不想那样做,因为程序员会失去它的踪迹。 :) –