2013-11-25 58 views
0

因此,這裏是我的情況: 我有三個功能進行了一些化學反應(synthesis1(),synthesis2()& synthesis3())。 所有這些函數都會給出答案或者結果失敗。 他們原本是單獨的腳本,但現在在一個類。 注意:即使在課堂上,這些功能本身也能正常工作。 以下是我的腳本來實例化類並啓動函數。處理多個不同的結果

我的問題是,因爲我運行的時候觸發所有功能的反應; 我得到一個1正確的答案,兩個失敗或三失敗。

什麼是處理這種情況的最好辦法。 我想要一個正確的答案,並抑制兩個失敗或只顯示一個失敗的情況下,三失敗(全部失敗)。我不期待三個正確的答案。 P.s.所有答案都是字符串。

<?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";} 

} 
?> 
+1

爲什麼要在循環中再次調用綜合函數?你不想只是想檢查'$ search'是成功還是失敗? – Barmar

回答

0

我不知道爲什麼你需要實例化三個不同的對象,如果你有三個單獨命名方法。

我想你可能想的方法添加到您的類簡單地將所有同時運行所有的合成方法,並返回結果。因此類似於:

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

然後,您只會實例化一個對象。用法如下:

$synth_obj = new synthesis(); 
var_dump($synth_obj->synthesize_all()); 
+0

很好的答案。我會試試這個。 – Edwinner

+0

所以,我的函數返回一個字符串或false(null或no的反應)爲我的答案。這是好事;有沒有辦法在事後分配錯誤的結果值?如果錯誤,請返回此其他值/字符串?這是否意味着處理結果的另一個功能? – Edwinner

+0

@Edwinner我寫'syntehsize_all()'方法的方式是,如果所有方法都失敗,它將返回第一個成功的函數結果或「false」。如果你想返回false以外的東西,你可以直接返回一些其他的值(例如,在循環運行後if'false === $ result){return null;} else {return $ result;}' –

0

一個簡單的方法來處理這個問題是使用或邏輯:

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."; 
} 
+0

這解決了一個答案部分,但它沒有做任何有關失敗的答案。儘管如此,還是一個很好的答案你可以編輯更多? – Edwinner