2014-02-20 3 views
0

CRON 편집기를 갑자기 실행하지 못했지만 편집자가 오늘 아침에 설명 할 수없는 기이함을 발견했습니다. 여기 누군가를 바라고 있으면 나를 계몽 할 수 있습니다.0 == * true를 평가합니다. 0 === * false로 평가합니다.

누구나 컨텍스트없이이 질문에 대답 할 수 있다면 내 질문은 본질적으로 "0 == *이 사실로 평가되는 이유는 무엇입니까?"

세부

우리는 MySQL의 테이블에 모든 활성 CRON 작업의 세부 사항을 저장합니다. 분, 시간, 일 및 월 필드의 유형은 기본값이 '*'인 varchar입니다. CRON 작업을 편집 할 때 우리는 아래에 표시된 $CRON이라는 레이블이 붙은 가져온 행의 현재 값을 선택해야하는 select와 그 예가 있습니다.

어레이 ([CRONID] => 10 [분] => 21 [시간] => 6 일] => * 개월] => * 평일] => * 파일] => CRON_Prop_44 .PHP [상태] => 1 CreateBy] => 128 CreateDate] => 2014년 2월 20일 [ChangeBy] => 128 CHANGEDATE] => 2014년 2월 20일)

에게 깨진 선택

다음은 일요일을 선택한 옵션으로 선택합니다. Inspector는 옵션 값 = "*"및 옵션 값 = "0"이 모두 선택되었음을 나타냅니다.

<select name="Weekday"> 
    <option value="*" <?php if ($CRON['Weekday'] == "*") { echo "selected";} ?> >* - Every day</option> 
<?php 
$x = 0; 
while ($x < 7) { 
    switch ($x) { 
     case 0: 
     $dayname = "Sunday"; 
     break; 
     case 1: 
     $dayname = "Monday"; 
     break; 
     case 2: 
     $dayname = "Tuesday"; 
     break; 
     case 3: 
     $dayname = "Wednesday"; 
     break; 
     case 4: 
     $dayname = "Thursday"; 
     break; 
     case 5: 
     $dayname = "Friday"; 
     break; 
     case 6: 
     $dayname = "Saturday"; 
     break; 
    } 
?> 
    <option value="<?php echo $x; ?><?php if ($CRON['Weekday'] == $x) { echo "selected";} ?> ><?php echo $dayname; ?></option> 
<?php 
    $x++; 
}?> 

일요일도 선택되어 있다는 사실은 0 == *이 참 있는게 틀림 없어. == 대신 === 비교 연산자를 추가하여 위의 작업을 예상대로 수행 할 수 있지만 그 이유는 알 수 없습니다. 스위치가있는 것입니까? 옵션 값 = "0"입니까? 또는 제목에서 알 수 있듯이 0 == *이 맞습니까? 기능

(정렬)을

선택 나는 이전 사람의 코드는 위의 지저분한 줄 알았는데, 그래서 나는 현재 다음과 같은 일을 해요. 그래도 =====으로 변경하면 일요일 만 선택됩니다.

<select name="Weekday"> 
    <option value="*" <?php if ($CRON['Weekday'] == "*") { echo "selected";} ?> >* - Every day</option> 
<?php 
    $days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); 
    $x = 0; 
    while ($x < 7) { 
     echo '<option value="' . $x . '" ' . (($CRON['Weekday'] == $x) ? 'selected' : "") . '>' . $days[$x] . '</option>'; 
     $x++;  
    } 
?> 
</select> 

이 게시물의 끝에 지속 한 경우, 내가 놓친 게 뭔지 알려주세요?

http://www.php.net/manual/en/language.types.boolean.php 그래서 더 궁금가 없어야합니다 : 그 문자열 boolean에 캐스팅의 계약에 따라 평가하는 방법이기 때문에

답변

2

문자열 '*' true로 평가합니다.같은 종류 (정수/숫자 또는 문자열)

  • 가 부담의

    • :

      a === bab이 있어야, 동일 의미 모든 종류의 강제 변환을하지 않습니다 동일한 값

    이제 integer 정도로 0 === '*'false 평가하는 string 아니다.

  • +0

    아아아, 고마워. – jboneca

    관련 문제