[php] 어디에서 isset () 및! empty ()를 사용해야합니까?

isset()함수가 빈 문자열을으로 취급 TRUE하므로 isset()HTML 양식에서 텍스트 입력 및 텍스트 상자의 유효성을 검사하는 효과적인 방법이 아니라는 것을 읽었습니다 .

따라서 empty()사용자가 무언가를 입력했는지 확인하는 데 사용할 수 있습니다 .

  1. isset()함수가 빈 문자열을 다음과 같이 취급 한다는 것이 사실 TRUE입니까?

  2. 그렇다면 어떤 상황에서 사용해야 isset()합니까? 항상 !empty()무언가가 있는지 확인 하기 위해 사용해야합니까 ?

예를 들어 대신

if(isset($_GET['gender']))...

이것을 사용하여

if(!empty($_GET['gender']))...



답변

isset vs.! empty

FTA :

“isset ()은 변수에 (False, 0 또는 빈 문자열)을 포함하는 값이 있는지 확인하지만 NULL이 아닌지 확인합니다. var가 있으면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다.

반면에 empty () 함수는 변수에 빈 값이 빈 문자열, 0, NULL 또는 False인지 확인합니다. var에 비어 있지 않고 0이 아닌 값이 있으면 FALSE를 반환합니다. “


답변

가장 일반적인 방법 :

  • isset변수 (또는 배열의 요소 또는 객체의 속성) 가 존재 하는지 (그리고 null이 아닌지 ) 테스트
  • empty 변수 (…)에 비어 있지 않은 데이터가 포함되어 있는지 테스트합니다.

질문 1에
답하려면 :

$str = '';
var_dump(isset($str));

준다

boolean true

변수 $str가 존재하기 때문입니다.

그리고 질문 2 :

isset을 사용하여 변수가 가 존재 합니다 . 예를 들어, 일부 데이터를 배열로 가져 오는 경우 해당 배열에 키가 설정되어 있는지 확인해야 할 수 있습니다.
예를 들어 / 에 대해
생각해보십시오 .$_GET$_POST

이제 그 가치를 연구하기 위해, 그러한 가치가 있다는 것을 알 때 : empty .


답변

둘 다 유효한 입력을 확인하는 좋은 방법이 아닙니다.

  • isset() 이미 언급했듯이 빈 문자열을 유효한 값으로 간주하기 때문에 충분하지 않습니다.
  • ! empty() 유효한 값일 수있는 ‘0’을 거부하기 때문에 충분하지 않습니다.

isset()빈 문자열에 대한 동등성 검사와 결합 하여 사용 하는 것은 수신 매개 변수에 거짓 부정을 생성하지 않고 값이 있는지 확인하는 데 필요한 최소한의 것입니다.

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

그러나 “최소한”이라는 말은 정확히 그것을 의미합니다. 위의 코드는 모두에 대한 값이 있는지 여부를 확인하는 것입니다 $_GET['gender']. 의 값 이 유효한지 여부 (예 : 중 하나 ) 는 결정 하지 않습니다 .$_GET['gender']("Male", "Female","FileNotFound")

이를 위해 Josh Davis의 답변을 참조하십시오 .


답변

isset값이 아닌 변수에만 사용하기위한 것이므로 isset("foobar")오류가 발생합니다. PHP 5.5부터는 empty변수와 표현식을 모두 지원합니다.

따라서 첫 번째 질문은 빈 문자열을 포함하는 변수에 대해 trueisset반환 하는지 여부 입니다. 그리고 대답은 :

$var = "";
var_dump(isset($var));

타입 비교 테이블PHP 매뉴얼 은 이러한 질문에 매우 유용합니다.

isset기본적으로 검사 변수 이외의 값이있는 경우 는 null를 존재하지 않는 변수는 항상 값이 있기 때문에 널을 . empty카운터 부분의 일종 isset이지만 정수 값 0과 문자열 값 "0"도 비어있는 것으로 취급합니다 . (다시 한 번 유형 비교 테이블을 살펴보십시오 .)


답변

$ _POST [ ‘param’]이 있고 문자열 유형이라고 가정하면

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

~와 동일하다

!empty($_POST['param'])


답변

isset ()은 HTML 양식에서 텍스트 입력 및 텍스트 상자의 유효성을 검사하는 효과적인 방법이 아닙니다.

“isset ()은 입력의 유효성을 검사하는 방법이 아닙니다.”라고 다시 작성할 수 있습니다 . 입력을 확인하려면 PHP의 필터 확장을 사용 합니다 . filter_has_var()변수가 존재하는지 여부를 알려줍니다.filter_input()실제로 입력을 필터링 및 / 또는 삭제하는 .

filter_has_var()이전 에 사용할 필요 filter_input()가 없으며 설정되지 않은 변수를 요청 filter_input()하면을 반환 null합니다.


답변

사용시기 및 방법 :

  1. isset ()

0, 1의 경우 , 빈 문자열, 값을 포함하는 문자열, 참, 거짓

null 인 경우 False

예 :

$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False

1의 경우 False , 값을 포함하는 문자열, true

null의 경우 , 빈 문자열, 0, 거짓 예

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False