我有一个函数用于检查两个变量是否匹配,但是具有不同的值。这是一个有点复杂的想法......但这是一个使用它的例子:
match($set1->test,"YES",$set2->test,"ON")
如果$set1->test == "YES" && $set2->test == "ON"
以下是其实施方式的示例:
function match($field1,$val1,$field2,$val2) {
if ((isset($field1) && $field1 == $val1) && (isset($field2) && $field2 == $val2))
{
return true;
}
return false;
}
所以这里最大的问题是你不能在函数内部使用函数的参数进行isset
。这是毫无意义的,因为在调用函数时会抛出错误$set1->test
,如果它不是对象属性,那么无论如何变量都会在函数范围内初始化。似乎解决这个问题的唯一方法是在将它们传递给函数之前对$set1->test
和$set2->test
进行isset测试,但我真的不想这样做。感觉没必要。
我的问题是,如果match($set1->test,"YES",$set2->test,"ON")
或$set1->test
未设置,我该如何致电$set2->test
?
ANSWER
我将使用Tamás答案的变体。我将有一个名为prop
的单独函数,如下所示:
function prop($obj, $property) {
if (property_exists($obj,$property)) {
return $obj->$property;
}
return null;
}
然后我会像这样打电话给match
:
match(prop($set1,'test'),"YES",prop($set2,'test'),"ON")
谢谢!
答案 0 :(得分:1)
尝试使用property_exists
function match($obj1, $obj2,$property,$val1,$val2) {
if ((property_exists($obj1, $property) && $obj1->$property == $val1) && (property_exists($obj2, $property) && $obj2->$property == $val2))
{
return true;
}
return false;
}
答案 1 :(得分:0)
它不是很受欢迎,但这可能是@
修饰符禁用错误的有效用途:
@match($set1->test, "YES", $set2->test, "ON");
答案 2 :(得分:0)
我会做这样的事情:
function match($field1=NULL,$val1=NULL,$field2=NULL,$val2=NULL) {
$result = false;
if (!is_null($field) && !is_null($val1) && !is_null($field2) && !is_null($val2)) {
if ($field1 == $val1 && $field2 == $val2) {
$result = true;
}
else {
$result = false;
}
}
return $result;
}