관심있는 분들을 위해이 주제를 작은 기사로 확장했습니다. 아래 정보는 좀 더 구조화 된 형식으로 제공됩니다. The Definitive Guide To PHP isset And empty
IMHO 앱을 "E_NOTICE 호환"으로 만드는 것뿐만 아니라 모든 것을 재구성하는 것에 대해 생각해야합니다. 데 수백 코드에 포인트를 정기적으로 다소 심하게 구조화 된 프로그램과 같은 존재하지 않는 변수 소리를 사용하려고있다. 존재하지 않는 변수에 접근하려는 시도는 절대 일어나서는 안되며, 다른 언어는 컴파일 타임에이 상황을 방해합니다. PHP가 그렇게 할 수 있다는 사실이 그렇게해야한다는 의미는 아닙니다.
이러한 경고는 당신을 성가 시게하는 것이 아니라 당신 을 돕기 위한 것입니다. "존재하지 않는 작업을 시도하고 있습니다!" 라는 경고가 표시되는 경우 , 귀하의 반응은 "죄송합니다. 죄송합니다. 최대한 빨리 수정하겠습니다." "정의되지 않고 잘 작동하는 변수" 와 심각한 오류를 유발할 수있는 정직하게 잘못된 코드 의 차이점을 어떻게 구분할 수 있습니까? 이것은 또한 항상 오류보고 를 11로 설정하여 개발 하고 단 하나가 아닐 때까지 코드를 계속 연결 하는 이유이기도합니다.NOTICE
. 오류보고 기능을 끄는 것은 정보 유출을 방지하고 버그가있는 코드가있는 경우에도 더 나은 사용자 경험을 제공하기 위해 프로덕션 환경에만 해당됩니다.
자세히 설명하려면 :
항상 필요 isset
하거나 empty
코드의 어딘가에서 발생을 줄이는 유일한 방법은 변수를 올바르게 초기화하는 것입니다. 상황에 따라 다른 방법이 있습니다.
함수 인수 :
function foo ($bar, $baz = null) { ... }
여부를 확인 할 필요가 없습니다 $bar
또는 $baz
경우에 그 값들을 평가하는 것입니다에 대해 당신은 단지 그들을 설정하기 때문에 함수 내에서 설정이 모든 당신이 걱정할 필요 true
하거나 false
(또는 어떤 다른).
어디서나 일반 변수 :
$foo = null;
$bar = $baz = 'default value';
변수를 사용할 코드 블록의 맨 위에서 변수를 초기화하십시오. 이것은 문제를 해결하고 !isset
, 변수가 항상 알려진 기본값을 가지도록 보장하고, 독자에게 다음 코드가 어떤 작업을 수행 할 것인지에 대한 아이디어를 제공하여 일종의 자체 문서화 역할도합니다.
어레이 :
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
위와 마찬가지로 기본값으로 배열을 초기화하고 실제 값으로 덮어 씁니다.
나머지 경우 컨트롤러에 의해 설정되거나 설정되지 않은 값을 출력하는 템플릿을 가정 해 보겠습니다. 다음 사항 만 확인하면됩니다.
<table>
<?php if (!empty($foo) && is_array($foo)) : ?>
<?php foreach ($foo as $bar) : ?>
<tr>...</tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td>No Foo!</td></tr>
<?php endif; ?>
</table>
을 정기적으로 사용 array_key_exists
하고 있다면 어떤 용도로 사용하는지 평가해야합니다. 차이를 만드는 유일한 경우는 다음과 같습니다.
$array = array('key' => null);
isset($array['key']); // false
array_key_exists('key', $array); // true
위에서 언급했듯이 변수를 올바르게 초기화하는 경우 키가 존재하는지 여부를 알기 때문에 확인할 필요가 없습니다. 외부 소스에서 배열을 얻는 경우, 값이 가장 가능성이되지 않습니다 null
만 ''
, 0
, '0'
, false
또는 같은, 즉 가치 당신과 함께 평가할 수 있습니다 isset
또는 empty
귀하의 의도에 따라. 정기적으로 배열 키를 설정 한 경우 null
와 평균 아무것도를 원하지만 false
, 즉, 위의 예에서의 서로 다른 결과를 경우 isset
와는 array_key_exists
왜 프로그램 로직에 변화를, 당신은 자신을 요청해야합니다. 변수의 존재만으로는 중요하지 않으며 그 값만이 중요해야합니다. 키가 true
/ false
플래그이면true
또는 false
,하지 null
. 이것에 대한 유일한 예외 null
는 무언가를 의미 하려는 써드 파티 라이브러리 일 것입니다. 그러나 null
PHP에서 감지하기가 너무 어렵 기 때문에 아직 이것을 수행하는 라이브러리를 찾지 못했습니다.