检查可能存在或不存在的变量的函数 - PHP

时间:2015-10-06 21:44:44

标签: php

我有一个函数用于检查两个变量是否匹配,但是具有不同的值。这是一个有点复杂的想法......但这是一个使用它的例子:

match($set1->test,"YES",$set2->test,"ON")

如果$set1->test == "YES" && $set2->test == "ON"

,它将返回true

以下是其实施方式的示例:

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")

谢谢!

3 个答案:

答案 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;
}