값이 isset이고 null인지 확인합니다.
값이 null을 포함하여 정의되어 있는지 확인해야 합니다. isset
null 값을 정의되지 않은 것으로 처리하여 반환한다.false
. 예를 들어 다음과 같습니다.
$foo = null;
if(isset($foo)) // returns false
if(isset($bar)) // returns false
if(isset($foo) || is_null($foo)) // returns true
if(isset($bar) || is_null($bar)) // returns true, raises a notice
주의:$bar
정의되어 있지 않습니다.
다음을 충족하는 조건을 찾아야 합니다.
if(something($bar)) // returns false;
if(something($foo)) // returns true;
좋은 생각 있어요?
IIRC는 다음과 같이 사용할 수 있습니다.
$foo = NULL;
$vars = get_defined_vars();
if (array_key_exists('bar', $vars)) {}; // Should evaluate to FALSE
if (array_key_exists('foo', $vars)) {}; // Should evaluate to TRUE
값이 NULL일 수 있는 오브젝트 속성을 취급하는 경우: 대신 사용할 수 있습니다.isset()
<?php
class myClass {
public $mine;
private $xpto;
static protected $test;
function test() {
var_dump(property_exists($this, 'xpto')); //true
}
}
var_dump(property_exists('myClass', 'mine')); //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto')); //true, as of PHP 5.3.0
var_dump(property_exists('myClass', 'bar')); //false
var_dump(property_exists('myClass', 'test')); //true, as of PHP 5.3.0
myClass::test();
?>
isset()과 달리 property_exists()는 속성의 값이 NULL인 경우에도 TRUE를 반환합니다.
PHP에서 변수의 존재를 테스트하는 최상의 방법을 참조하십시오. isset()이(가) 명확하게 손상되었습니다.
if( array_key_exists('foo', $GLOBALS) && is_null($foo)) // true & true => true
if( array_key_exists('bar', $GLOBALS) && is_null($bar)) // false & => false
이 토픽은 어레이의 솔루션을 찾고 있을 때 발견되었습니다.NULL을 포함한 어레이 요소가 존재하는지 확인하기 위해 이 구조가 도움이 되었습니다.
$arr= [];
$foo = 'foo';
$arr[$foo]= NULL;
if (array_key_exists('bar', $arr)) {}; // Should evaluate to FALSE
if (array_key_exists('foo', $arr)) {}; // Should evaluate to TRUE
if (array_key_exists($foo, $arr)) {}; // Should evaluate to TRUE
나는 그것을 발견했다.compact
설정되지 않은 변수를 무시하지만 로 설정된 변수에 대해 동작하는 함수입니다.null
로컬 심볼 테이블이 크면 체크보다 더 효율적인 솔루션을 얻을 수 있습니다.array_key_exists('foo', get_defined_vars())
을 사용하여array_key_exists('foo', compact('foo'))
:
$foo = null;
echo isset($foo) ? 'true' : 'false'; // false
echo array_key_exists('foo', compact('foo')) ? 'true' : 'false'; // true
echo isset($bar) ? 'true' : 'false'; // false
echo array_key_exists('bar', compact('bar')) ? 'true' : 'false'; // false
갱신하다
PHP 7.3 compact()에서는 설정되지 않은 값에 대한 알림이 표시되므로 안타깝게도 이 대체 방법은 더 이상 유효하지 않습니다.
compact()는 지정된 문자열이 설정되지 않은 변수를 참조할 경우 E_NOTICE 레벨 오류를 발생시킵니다.이전에는 이러한 문자열은 묵묵히 건너뛰었습니다.
PHP 확장자로 작성된 다음 코드는 (Henrik 및 Hannes 덕분에) array_key_exists($name, get_defined_vars())와 동일합니다.
// get_defined_vars()
// https://github.com/php/php-src/blob/master/Zend/zend_builtin_functions.c#L1777
// array_key_exists
// https://github.com/php/php-src/blob/master/ext/standard/array.c#L4393
PHP_FUNCTION(is_defined_var)
{
char *name;
int name_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
return;
}
if (!EG(active_symbol_table)) {
zend_rebuild_symbol_table(TSRMLS_C);
}
if (zend_symtable_exists(EG(active_symbol_table), name, name_len + 1)) {
RETURN_TRUE;
}
}
isset() 대신 is_null 및 empty를 사용할 수 있습니다.변수가 존재하지 않으면 Empty는 오류 메시지를 출력하지 않습니다.
다음은 xdebug를 사용한 몇 가지 어리석은 회피책입니다.;-)
function is_declared($name) {
ob_start();
xdebug_debug_zval($name);
$content = ob_get_clean();
return !empty($content);
}
$foo = null;
var_dump(is_declared('foo')); // -> true
$bla = 'bla';
var_dump(is_declared('bla')); // -> true
var_dump(is_declared('bar')); // -> false
다운투표의 위험이 있기 때문에, 저는 신경도 쓰지 않습니다.분명히 PHP는 NULL과 Undef를 논리적으로 동일하게 생각하기를 원했습니다.이 기능을 사용하여 실행했습니다.
bool isEmpty(& $davar);
isset(null과 undef 모두), " 및 어레이를 체크합니다.이것은 고의로 거짓을 다루는 것이 아니라 단지 공허함을 다루는 것입니다.& 'reference-izer'를 사용하면 에러 메시지 없이 정의되지 않은 경우에도 변수를 전달할 수 있습니다.isset을 확인하고 false를 먼저 반환하면 "" 및 array()에 대한 다음 체크를 오류 없이 수행할 수 있습니다.
다음 함수는 이 기능을 활용하며 사용하려는 장소에서 사용됩니다.
$davar || some-default.
즉, 다음과 같습니다.
mixed defaultForEmpty(& $daVar, $default);
조건이 있습니다.
if (isEmpty($daVar))
return $default;
else
return $daVar;
참고로 오브젝트 참조, 어레이 인덱스, $_GET, $_POST 등과 연동됩니다.
제 경우, 다음과 같은 코드를 가지고 있었습니다.
class SomeClass {
private $cachedInstance;
public instance()
{
if (! isset($this->cachedInstance)) {
$this->cachedInstance = GetCachedInstanceFromDb(); // long operation, that could return Null if the record not found
}
return $this->cachedInstance;
}
}
그것은 했습니다.GetCachedInstanceFromDb()
null이 번 되었습니다.모든 것은,isset()
틀리다
그래서 다음과 같은 변경을 해야 했습니다.
초기값이 False로 설정된 속성을 선언합니다.
현재 변수 값을 확인할 때는 엄격한 (타입 세이프) 비교를 사용합니다.
class SomeClass {
private $cachedInstance = false; // #1
public instance()
{
if ($this->cachedInstance === false) { // #2
$this->cachedInstance = GetCachedInstanceFromDb();
}
return $this->cachedInstance;
}
}
is_null($bar)
사실대로 말하다또는 다음을 사용할 수 있습니다.
if(isset($bar) && is_null($bar)) // returns false
를 확인하다$bar
사실대로 말하다
$bar = null;
if(isset($bar) && is_null($bar)) // returns true
언급URL : https://stackoverflow.com/questions/3803282/check-if-value-isset-and-null
'programing' 카테고리의 다른 글
PHP를 사용하여 다음 날과 이전 날 가져오기 (0) | 2023.01.08 |
---|---|
React를 사용하여 브라우저 크기 조정 시 보기 다시 렌더링 (0) | 2023.01.08 |
reST 대신 Markdown과 함께 Sphinx 사용 (0) | 2023.01.08 |
왜 'DELimiter //'는 MariaDB에서 오류를 발생시키나요? (0) | 2023.01.08 |
MySQL 오류 2006: mysql 서버가 사라졌습니다. (0) | 2023.01.08 |