Php 处理多变量结果

Php 处理多变量结果,php,Php,因此,我的情况如下: 我有三个函数执行一些化学反应(synthesis1()、synthesis2()和synthesis3()。 所有这些函数都将在结果中给出答案或失败。 它们最初是单独的脚本,但现在在一个类中。 注意:这些函数本身运行良好,即使在课堂上也是如此。 下面是我实例化类并启动函数的脚本 我的问题是,因为我正在运行一个触发所有函数的反应; 我得到一个正确答案,两个或三个同时不及格 处理这种情况的最佳方式是什么。 我想要一个正确答案并抑制两个失败,或者在三个失败(全部失败)的情况下只显

因此,我的情况如下: 我有三个函数执行一些化学反应(synthesis1()、synthesis2()和synthesis3()。 所有这些函数都将在结果中给出答案或失败。 它们最初是单独的脚本,但现在在一个类中。 注意:这些函数本身运行良好,即使在课堂上也是如此。 下面是我实例化类并启动函数的脚本

我的问题是,因为我正在运行一个触发所有函数的反应; 我得到一个正确答案,两个或三个同时不及格

处理这种情况的最佳方式是什么。 我想要一个正确答案并抑制两个失败,或者在三个失败(全部失败)的情况下只显示一个失败。我不指望有三个正确答案。 注:所有答案都是字符串

 <?php
// create an object for class name
 $aaa = new synthesis();
 $abc = new synthesis();
 $abcd = new synthesis();

// call the functions in the class
$synthesis1 = $aaa->synthesis1();
$synthesis2 = $abc->synthesis2();
$synthesis3 = $abcd->synthesis3();

// call the if functions
$searches = array($synthesis1, $synthesis2, $synthesis3);

foreach($searches as $search) {
if ($aaa->synthesis1($search)){
    echo 'Match found: ' . $search;
    break;
}

    elseif ($abc->synthesis2($search)){
            echo 'Match found: ' . $search;
            break;
        }

        elseif ($abcd->synthesis3($search)){
            echo 'Match found: ' . $search;
            break;
        }

        else{ echo"Please try again or try another reaction";}

}
?>

处理此问题的简单方法是使用或逻辑:

if($aaa->synthesis1($search) or $abc->synthesis2($search) or $abcd->synthesis3($search))
{
    echo "Match Found: $search";
    break;
}
else
{
    echo "Please try again or try another reaction.";
}

如果有三个单独命名的方法,我不知道为什么需要实例化三个不同的对象

我认为您可能希望向类中添加一个方法,以便一次运行所有合成方法并返回结果。比如:

class synthesis {
    protected $synthesis_methods = array(
        'synthesis1',
        'synthesis2',
        'synthesis3',
        // add more methods here if needed
    }
    public function synthesis1() {
        // your method logic here
    }
    public function synthesis2() {
        // your method logic here
    }
    public function synthesis2() {
        // your method logic here
    }
    public function synthesize_all() {
        $result = false;
        $i = 0;
        while(false === $result && $i < count($this->synthesis_methods)) {
            $result = call_user_func(array($this, $this->synthesis_methods[$i]));
            $i++;
        }
        return $result;
    }
}

为什么要在循环中再次调用合成函数?难道你不想检查一下
$search
是成功还是失败的结果吗?答案很好。我将用这种方式尝试一种方法。因此,我的函数返回字符串或false(null或无反应)作为我的答案。这是好的;有没有一种方法可以在事实之后为假结果赋值?如果为false,则返回此其他值/字符串?这是否意味着需要另一个函数来处理结果?@Edwinner我写的
syntehsize_all()
方法是,如果所有方法都失败,它将返回第一个成功的函数结果或
false
。如果您想返回false以外的值,您可以只返回其他值(即在循环运行
If(false===$result){return null;}其他{return$result;}
这解决了一个答案部分,但它对失败的答案没有任何作用。这仍然是一个好答案!您可以编辑更多吗?
$synth_obj = new synthesis();
var_dump($synth_obj->synthesize_all());