2013-11-24 2 views
0

이 예제 코드에서는 모든 함수에서 와일드 카드 검색을 실행하고 있습니다. 가능성 알칼() 함수는 정답을주고 다른 함수는 잘못된 대답을 반환합니다. 반대의 경우도 마찬가지입니다.클래스 함수 연산의 결과를 어떻게 억제합니까?

다른 함수에서 올바른/정답 을 얻으면 한 함수에서 실패한 부분을 어떻게 억제합니까? 나는 "이것이 알칼리 금속"임을 이미 보여 주면 "금속은 알려지지 않았다"는 것을 보여주고 싶지 않습니다.

<?php 
class metals 
{ 

    function alkali() 
    { 
     if (($rowC['description'] == " Alkali Metal")) { 
      echo ''; 
     } else { 
      echo 'metal is unknown'; 
     } 

    } 

    function alkaline_earth() 
    { 
     if (($rowC['description'] == " Alkali earth Metal")) { 
      echo ' this is an alkali earth metal'; 
     } else { 
      echo 'metal is unknown'; 
     } 
    } 
    //end of class  
} 

// create an object for class name 
$abc = new metals(); 
$abcd = new metals(); 

// call the functions in the class 
$abc->alkali(); 
$abcd->alkaline_earth(); 

?> 
+1

함수가 각각 하나의 책임 (요소가 X인지 확인)이 2 개가 아닌 (결과를 결정하고 인쇄 할 경우)이 문제가 발생하지 않습니다. 이 일을하는 방법은 나쁘다. 코드를 리팩터링하십시오. – Jon

+0

함수가 결과를'return '(아마도'true' 또는'false')하게 만들고, 코드의 다른 부분에 무엇을 표시 할 것인지에 대한 논리를 남겨 둡니다. 두 가지 결과를 모두보고 무엇을 할 것인지 결정할 수 있습니다 . – IMSoP

+0

또한,'$ rowC'가 어디에도 정의되어 있지 않기 때문에 여러분이 제공하는 예제 코드는 의미가 없습니다. 나는 당신이'$ this-> rowC'를 의미하고 그것을 객체를 생성 할 때 전달할 의도가 있다고 생각한다. – IMSoP

답변

0

원하는 결과를 달성하기 위해 더 짧고 우아한 방법은 다음과 같습니다

<?php 

class metals { 
    // Consider defining this as a static function if $rowC is not 
    // intended to be a member of the class `metals`. 
    function isMatch($search) { 
     return $rowC['description'] == $search; 
    } 
} 

$abc = new metals(); 
$searches = array('Alkali Metal', 'Alkali Earth Metal', 'Some Other Metal'); 

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

?> 

루프를 출력 첫 경기 후 종료합니다.

+0

@edwinner :'$ rowC'가 위의 코드 샘플이 위치하거나 전역 범위 내에있는 파일의 범위 내에서 변수로 정의되었는지 확인하십시오. – Daniel

+0

좋아요! 나는 그것이 foreach 루프와 관련이 있다는 것을 알고 있었다. 이것은 확실히 작동 할 것이다. – Edwinner

관련 문제